home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 2 / AACD 2.iso / AACD / Magazine / GraphicsCards / StormMesa / src / matrix.s < prev    next >
Text File  |  1999-02-04  |  61KB  |  3,384 lines

  1.  
  2. ; Storm C Compiler
  3. ; Work2:Mesa3/Mesa-3.0/src/matrix.c
  4.     mc68030
  5.     mc68881
  6.     XREF    _gl_error
  7.     XREF    _gl_problem
  8.     XREF    _gl_ResizeBuffersMESA
  9.     XREF    _q_memcpy
  10.     XREF    _fabs__r
  11.     XREF    _sqrt__r
  12.     XREF    _cos__r
  13.     XREF    _sin__r
  14.     XREF    _std__in
  15.     XREF    _std__out
  16.     XREF    _std__err
  17.     XREF    _CC
  18.  
  19.     SECTION "_Identity:1",DATA
  20.  
  21. _Identity
  22.     dc.l    $3F800000,0,0,0,0,$3F800000,0,0,0,0,$3F800000
  23.     dc.l    0,0,0,0,$3F800000
  24.  
  25.     SECTION "_matmul:0",CODE
  26.  
  27.     rts
  28.  
  29. ;static void matmul( GLfloat *product, const GLfloat *a, const GLfloa
  30. _matmul
  31.     movem.l    d2/a2/a3,-(a7)
  32.     fmovem.x fp2/fp3/fp4/fp5/fp6,-(a7)
  33.     move.l    $54(a7),a0
  34.     move.l    $4C(a7),a1
  35.     move.l    $50(a7),a2
  36. L116
  37. ;   for (i = 0;
  38.     moveq    #0,d0
  39.     bra    L118
  40. L117
  41. ;      GLfloat ai0=A(i,0)
  42.     move.l    d0,d1
  43.     asl.l    #2,d1
  44.     add.l    a2,d1
  45.     move.l    d1,a3
  46.     fmove.s    (a3),fp0
  47. ;      GLfloat ai0=A(i,0),  ai1=A(i,1)
  48.     moveq    #$10,d1
  49.     add.l    a2,d1
  50.     move.l    d0,d2
  51.     asl.l    #2,d2
  52.     add.l    d1,d2
  53.     move.l    d2,a3
  54.     fmove.s    (a3),fp4
  55. ;      GLfloat ai0=A(i,0),  a
  56.     moveq    #$20,d1
  57.     add.l    a2,d1
  58.     move.l    d0,d2
  59.     asl.l    #2,d2
  60.     add.l    d1,d2
  61.     move.l    d2,a3
  62.     fmove.s    (a3),fp3
  63. ;    GLfloat ai0=A
  64.     moveq    #$30,d1
  65.     add.l    a2,d1
  66.     move.l    d0,d2
  67.     asl.l    #2,d2
  68.     add.l    d1,d2
  69.     move.l    d2,a3
  70.     fmove.s    (a3),fp2
  71. ;      P(i,0) = ai0 * B(0,0) + ai1 * B(1,0) + ai2 * B(2,0)
  72.     fmove.s    (a0),fp1
  73.     fmul.x    fp0,fp1
  74.     moveq    #4,d1
  75.     add.l    a0,d1
  76.     move.l    d1,a3
  77.     fmove.s    (a3),fp5
  78.     fmul.x    fp4,fp5
  79.     fadd.x    fp5,fp1
  80.     moveq    #$8,d1
  81.     add.l    a0,d1
  82.     move.l    d1,a3
  83.     fmove.s    (a3),fp5
  84.     fmul.x    fp3,fp5
  85.     fadd.x    fp5,fp1
  86.     moveq    #$C,d1
  87.     add.l    a0,d1
  88.     move.l    d1,a3
  89.     fmove.s    (a3),fp5
  90.     fmul.x    fp2,fp5
  91.     fadd.x    fp5,fp1
  92.     move.l    d0,d1
  93.     asl.l    #2,d1
  94.     add.l    a1,d1
  95.     move.l    d1,a3
  96.     fmove.s    fp1,(a3)
  97. ;      P(i,1) = ai0 * B(0,1) + ai1 * B(1,1) + ai2 * B(2,1)
  98.     moveq    #$10,d1
  99.     add.l    a0,d1
  100.     move.l    d1,a3
  101.     fmove.s    (a3),fp1
  102.     fmul.x    fp0,fp1
  103.     moveq    #$14,d1
  104.     add.l    a0,d1
  105.     move.l    d1,a3
  106.     fmove.s    (a3),fp5
  107.     fmul.x    fp4,fp5
  108.     fadd.x    fp5,fp1
  109.     moveq    #$18,d1
  110.     add.l    a0,d1
  111.     move.l    d1,a3
  112.     fmove.s    (a3),fp5
  113.     fmul.x    fp3,fp5
  114.     fadd.x    fp5,fp1
  115.     moveq    #$1C,d1
  116.     add.l    a0,d1
  117.     move.l    d1,a3
  118.     fmove.s    (a3),fp5
  119.     fmul.x    fp2,fp5
  120.     fadd.x    fp5,fp1
  121.     moveq    #$10,d1
  122.     add.l    a1,d1
  123.     move.l    d0,d2
  124.     asl.l    #2,d2
  125.     add.l    d1,d2
  126.     move.l    d2,a3
  127.     fmove.s    fp1,(a3)
  128. ;      P(i,2) = ai0 * B(0,2) + ai1 * B(1,2) + ai2 * B(2,2)
  129.     moveq    #$20,d1
  130.     add.l    a0,d1
  131.     move.l    d1,a3
  132.     fmove.s    (a3),fp1
  133.     fmul.x    fp0,fp1
  134.     moveq    #$24,d1
  135.     add.l    a0,d1
  136.     move.l    d1,a3
  137.     fmove.s    (a3),fp5
  138.     fmul.x    fp4,fp5
  139.     fadd.x    fp5,fp1
  140.     moveq    #$28,d1
  141.     add.l    a0,d1
  142.     move.l    d1,a3
  143.     fmove.s    (a3),fp5
  144.     fmul.x    fp3,fp5
  145.     fadd.x    fp5,fp1
  146.     moveq    #$2C,d1
  147.     add.l    a0,d1
  148.     move.l    d1,a3
  149.     fmove.s    (a3),fp5
  150.     fmul.x    fp2,fp5
  151.     fadd.x    fp5,fp1
  152.     moveq    #$20,d1
  153.     add.l    a1,d1
  154.     move.l    d0,d2
  155.     asl.l    #2,d2
  156.     add.l    d1,d2
  157.     move.l    d2,a3
  158.     fmove.s    fp1,(a3)
  159. ;      P(i,3) = ai0 * B(0,3) + ai1 * B(1,3) + ai2 * B(2,3)
  160.     moveq    #$30,d1
  161.     add.l    a0,d1
  162.     move.l    d1,a3
  163.     fmul.s    (a3),fp0
  164.     moveq    #$34,d1
  165.     add.l    a0,d1
  166.     move.l    d1,a3
  167.     fmul.s    (a3),fp4
  168.     fadd.x    fp4,fp0
  169.     moveq    #$38,d1
  170.     add.l    a0,d1
  171.     move.l    d1,a3
  172.     fmul.s    (a3),fp3
  173.     fadd.x    fp3,fp0
  174.     moveq    #$3C,d1
  175.     add.l    a0,d1
  176.     move.l    d1,a3
  177.     fmul.s    (a3),fp2
  178.     fadd.x    fp2,fp0
  179.     moveq    #$30,d1
  180.     add.l    a1,d1
  181.     move.l    d0,d2
  182.     asl.l    #2,d2
  183.     add.l    d1,d2
  184.     move.l    d2,a3
  185.     fmove.s    fp0,(a3)
  186.     addq.l    #1,d0
  187. L118
  188.     cmp.l    #4,d0
  189.     blt    L117
  190. L119
  191.     fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6
  192.     movem.l    (a7)+,d2/a2/a3
  193.     rts
  194.  
  195.     SECTION "_invert_matrix:0",CODE
  196.  
  197.  
  198. ;static GLboolean invert_matrix( const GLfloat *m, GLfloat *out )
  199. _invert_matrix
  200. L157    EQU    -$BC
  201.     link    a5,#L157
  202.     movem.l    a2-a4,-(a7)
  203.     fmovem.x fp2/fp3/fp4/fp5,-(a7)
  204.     move.l    $8(a5),a0
  205. L120
  206. ; r0 = wtmp[0], r1 = wtmp[1], r2 = wtmp[2], r3 = wtmp[3];
  207.     lea    -$80(a5),a1
  208.     move.l    a1,-$98(a5)
  209.     lea    -$80(a5),a1
  210.     moveq    #$20,d0
  211.     add.l    a1,d0
  212.     move.l    d0,-$9C(a5)
  213.     lea    -$80(a5),a1
  214.     lea    $40(a1),a2
  215.     lea    -$80(a5),a1
  216.     moveq    #$60,d0
  217.     add.l    a1,d0
  218.     move.l    d0,a4
  219. ; r0[0] = MAT(m,0,0), r0[1] = MAT(m,0,1),
  220.     fmove.s    (a0),fp0
  221.     move.l    -$98(a5),a1
  222.     fmove.s    fp0,(a1)
  223.     move.l    -$98(a5),a3
  224.     move.l    $10(a0),4(a3)
  225.     move.l    -$98(a5),a3
  226.     move.l    $20(a0),$8(a3)
  227.     move.l    -$98(a5),a3
  228.     move.l    $30(a0),$C(a3)
  229.     move.l    -$98(a5),a3
  230.     move.l    #$3F800000,$10(a3)
  231.     move.l    -$98(a5),a3
  232.     clr.l    $1C(a3)
  233.     move.l    -$98(a5),a3
  234.     clr.l    $18(a3)
  235.     move.l    -$98(a5),a3
  236.     clr.l    $14(a3)
  237.     move.l    -$9C(a5),a1
  238.     move.l    4(a0),(a1)
  239.     move.l    -$9C(a5),a3
  240.     move.l    $14(a0),4(a3)
  241.     move.l    -$9C(a5),a3
  242.     move.l    $24(a0),$8(a3)
  243.     move.l    -$9C(a5),a3
  244.     move.l    $34(a0),$C(a3)
  245.     move.l    -$9C(a5),a3
  246.     move.l    #$3F800000,$14(a3)
  247.     move.l    -$9C(a5),a3
  248.     clr.l    $1C(a3)
  249.     move.l    -$9C(a5),a3
  250.     clr.l    $18(a3)
  251.     move.l    -$9C(a5),a3
  252.     clr.l    $10(a3)
  253.     move.l    $8(a0),(a2)
  254.     move.l    $18(a0),4(a2)
  255.     move.l    $28(a0),$8(a2)
  256.     move.l    $38(a0),$C(a2)
  257.     move.l    #$3F800000,$18(a2)
  258.     clr.l    $1C(a2)
  259.     clr.l    $14(a2)
  260.     clr.l    $10(a2)
  261.     move.l    a4,a1
  262.     move.l    $C(a0),(a1)
  263.     move.l    $1C(a0),4(a4)
  264.     move.l    $2C(a0),$8(a4)
  265.     fmove.s    $3C(a0),fp0
  266.     fmove.s    fp0,$C(a4)
  267.     move.l    #$3F800000,$1C(a4)
  268.     clr.l    $18(a4)
  269.     clr.l    $14(a4)
  270.     clr.l    $10(a4)
  271. ; if (fabs(r3[0])>fabs(r2[0])) SWAP_ROWS(r3, r2)
  272.     move.l    a4,a0
  273.     fmove.s    (a0),fp0
  274.     fmove.d    fp0,-(a7)
  275.     jsr    _fabs__r
  276.     fmove.x    fp0,fp2
  277.     addq.w    #$8,a7
  278.     fmove.s    (a2),fp0
  279.     fmove.d    fp0,-(a7)
  280.     jsr    _fabs__r
  281.     addq.w    #$8,a7
  282.     fcmp.x    fp0,fp2
  283.     fbole.b    L122
  284. L121
  285. ; if (fabs(r3[0])>fabs(
  286.     move.l    a4,a0
  287. ; if (fabs(r3[0])>fabs(
  288.     move.l    a2,a4
  289. ; if (fabs(r3[0])>fabs(
  290.     move.l    a0,a2
  291. L122
  292. ; if (fabs(r2[0])>fabs(r1[0])) SWAP_ROWS(r2, r1)
  293.     fmove.s    (a2),fp0
  294.     fmove.d    fp0,-(a7)
  295.     jsr    _fabs__r
  296.     fmove.x    fp0,fp2
  297.     addq.w    #$8,a7
  298.     move.l    -$9C(a5),a0
  299.     fmove.s    (a0),fp0
  300.     fmove.d    fp0,-(a7)
  301.     jsr    _fabs__r
  302.     addq.w    #$8,a7
  303.     fcmp.x    fp0,fp2
  304.     fbole.b    L124
  305. L123
  306. ; if (fabs(r2[0])>fabs(
  307.     move.l    a2,a0
  308. ; if (fabs(r2[0])>fabs(
  309.     move.l    -$9C(a5),a2
  310. ; if (fabs(r2[0])>fabs(
  311.     move.l    a0,-$9C(a5)
  312. L124
  313. ; if (fabs(r1[0])>fabs(r0[0])) SWAP_ROWS(r1, r0)
  314.     move.l    -$9C(a5),a0
  315.     fmove.s    (a0),fp0
  316.     fmove.d    fp0,-(a7)
  317.     jsr    _fabs__r
  318.     fmove.x    fp0,fp2
  319.     addq.w    #$8,a7
  320.     move.l    -$98(a5),a0
  321.     fmove.s    (a0),fp0
  322.     fmove.d    fp0,-(a7)
  323.     jsr    _fabs__r
  324.     addq.w    #$8,a7
  325.     fcmp.x    fp0,fp2
  326.     fbole.b    L126
  327. L125
  328. ; if (fabs(r1[0])>fabs(
  329.     move.l    -$9C(a5),a0
  330. ; if (fabs(r1[0])>fabs(
  331.     move.l    -$98(a5),-$9C(a5)
  332. ; if (fabs(r1[0])>fabs(
  333.     move.l    a0,-$98(a5)
  334. L126
  335. ; if (0.0 == r0[0])  
  336.     move.l    -$98(a5),a0
  337.     fmove.s    (a0),fp0
  338.     ftst.d    fp0
  339.     fbne.b    L128
  340. L127
  341.     moveq    #0,d0
  342.     fmovem.x (a7)+,fp2/fp3/fp4/fp5
  343.     movem.l    (a7)+,a2-a4
  344.     unlk    a5
  345.     rts
  346. L128
  347. ; m1 = r1[0]/r0[0];
  348.     move.l    -$9C(a5),a0
  349.     fmove.s    (a0),fp3
  350.     move.l    -$98(a5),a0
  351.     fmove.s    (a0),fp0
  352.     fdiv.x    fp0,fp3
  353. ; m2 = r2[0]/r0[0];
  354.     fmove.s    (a2),fp2
  355.     move.l    -$98(a5),a0
  356.     fmove.s    (a0),fp0
  357.     fdiv.x    fp0,fp2
  358. ; m3 = r3[0]/r0[0];
  359.     move.l    a4,a0
  360.     fmove.s    (a0),fp1
  361.     move.l    -$98(a5),a0
  362.     fmove.s    (a0),fp0
  363.     fdiv.x    fp0,fp1
  364. ; s = r0[1];
  365.     move.l    -$98(a5),a1
  366.     fmove.s    4(a1),fp0
  367. ; r1[1] -= m1 * s;
  368.     fmove.x    fp3,fp5
  369.     fmul.x    fp0,fp5
  370.     move.l    -$9C(a5),a1
  371.     lea    4(a1),a0
  372.     fmove.s    (a0),fp4
  373.     fsub.x    fp5,fp4
  374.     fmove.s    fp4,(a0)
  375. ; r2[1] -= m2 * s;
  376.     fmove.x    fp2,fp5
  377.     fmul.x    fp0,fp5
  378.     lea    4(a2),a0
  379.     fmove.s    (a0),fp4
  380.     fsub.x    fp5,fp4
  381.     fmove.s    fp4,(a0)
  382. ; r3[1] -= m3 * s;
  383.     fmove.x    fp1,fp4
  384.     fmul.x    fp0,fp4
  385.     lea    4(a4),a0
  386.     fmove.s    (a0),fp0
  387.     fsub.x    fp4,fp0
  388.     fmove.s    fp0,(a0)
  389. ; s = r0[2];
  390.     move.l    -$98(a5),a1
  391.     fmove.s    $8(a1),fp0
  392. ; r1[2] -= m1 * s;
  393.     fmove.x    fp3,fp5
  394.     fmul.x    fp0,fp5
  395.     move.l    -$9C(a5),a1
  396.     lea    $8(a1),a0
  397.     fmove.s    (a0),fp4
  398.     fsub.x    fp5,fp4
  399.     fmove.s    fp4,(a0)
  400. ; r2[2] -= m2 * s;
  401.     fmove.x    fp2,fp5
  402.     fmul.x    fp0,fp5
  403.     lea    $8(a2),a0
  404.     fmove.s    (a0),fp4
  405.     fsub.x    fp5,fp4
  406.     fmove.s    fp4,(a0)
  407. ; r3[2] -= m3 * s;
  408.     fmove.x    fp1,fp4
  409.     fmul.x    fp0,fp4
  410.     lea    $8(a4),a0
  411.     fmove.s    (a0),fp0
  412.     fsub.x    fp4,fp0
  413.     fmove.s    fp0,(a0)
  414. ; s = r0[3];
  415.     move.l    -$98(a5),a1
  416.     fmove.s    $C(a1),fp0
  417. ; r1[3] -= m1 * s;
  418.     fmove.x    fp3,fp5
  419.     fmul.x    fp0,fp5
  420.     move.l    -$9C(a5),a1
  421.     lea    $C(a1),a0
  422.     fmove.s    (a0),fp4
  423.     fsub.x    fp5,fp4
  424.     fmove.s    fp4,(a0)
  425. ; r2[3] -= m2 * s;
  426.     fmove.x    fp2,fp5
  427.     fmul.x    fp0,fp5
  428.     lea    $C(a2),a0
  429.     fmove.s    (a0),fp4
  430.     fsub.x    fp5,fp4
  431.     fmove.s    fp4,(a0)
  432. ; r3[3] -= m3 * s;
  433.     fmove.x    fp1,fp4
  434.     fmul.x    fp0,fp4
  435.     lea    $C(a4),a0
  436.     fmove.s    (a0),fp0
  437.     fsub.x    fp4,fp0
  438.     fmove.s    fp0,(a0)
  439. ; s = r0[4];
  440.     move.l    -$98(a5),a1
  441.     fmove.s    $10(a1),fp0
  442. ; if (s != 0.0) 
  443.     fmove.x    fp0,fp4
  444.     ftst.d    fp4
  445.     fbeq.b    L130
  446. L129
  447. ; r1[4] -= m1 * s;
  448.     fmove.x    fp3,fp5
  449.     fmul.x    fp0,fp5
  450.     move.l    -$9C(a5),a1
  451.     lea    $10(a1),a0
  452.     fmove.s    (a0),fp4
  453.     fsub.x    fp5,fp4
  454.     fmove.s    fp4,(a0)
  455. ; r2[4] -= m2 * s;
  456.     fmove.x    fp2,fp5
  457.     fmul.x    fp0,fp5
  458.     lea    $10(a2),a0
  459.     fmove.s    (a0),fp4
  460.     fsub.x    fp5,fp4
  461.     fmove.s    fp4,(a0)
  462. ; r3[4] -= m3 * s;
  463.     fmove.x    fp1,fp4
  464.     fmul.x    fp0,fp4
  465.     lea    $10(a4),a0
  466.     fmove.s    (a0),fp0
  467.     fsub.x    fp4,fp0
  468.     fmove.s    fp0,(a0)
  469. L130
  470. ; s = r0[5];
  471.     move.l    -$98(a5),a1
  472.     fmove.s    $14(a1),fp0
  473. ; if (s != 0.0) 
  474.     fmove.x    fp0,fp4
  475.     ftst.d    fp4
  476.     fbeq.b    L132
  477. L131
  478. ; r1[5] -= m1 * s;
  479.     fmove.x    fp3,fp5
  480.     fmul.x    fp0,fp5
  481.     move.l    -$9C(a5),a1
  482.     lea    $14(a1),a0
  483.     fmove.s    (a0),fp4
  484.     fsub.x    fp5,fp4
  485.     fmove.s    fp4,(a0)
  486. ; r2[5] -= m2 * s;
  487.     fmove.x    fp2,fp5
  488.     fmul.x    fp0,fp5
  489.     lea    $14(a2),a0
  490.     fmove.s    (a0),fp4
  491.     fsub.x    fp5,fp4
  492.     fmove.s    fp4,(a0)
  493. ; r3[5] -= m3 * s;
  494.     fmove.x    fp1,fp4
  495.     fmul.x    fp0,fp4
  496.     lea    $14(a4),a0
  497.     fmove.s    (a0),fp0
  498.     fsub.x    fp4,fp0
  499.     fmove.s    fp0,(a0)
  500. L132
  501. ; s = r0[6];
  502.     move.l    -$98(a5),a1
  503.     fmove.s    $18(a1),fp0
  504. ; if (s != 0.0) 
  505.     fmove.x    fp0,fp4
  506.     ftst.d    fp4
  507.     fbeq.b    L134
  508. L133
  509. ; r1[6] -= m1 * s;
  510.     fmove.x    fp3,fp5
  511.     fmul.x    fp0,fp5
  512.     move.l    -$9C(a5),a1
  513.     lea    $18(a1),a0
  514.     fmove.s    (a0),fp4
  515.     fsub.x    fp5,fp4
  516.     fmove.s    fp4,(a0)
  517. ; r2[6] -= m2 * s;
  518.     fmove.x    fp2,fp5
  519.     fmul.x    fp0,fp5
  520.     lea    $18(a2),a0
  521.     fmove.s    (a0),fp4
  522.     fsub.x    fp5,fp4
  523.     fmove.s    fp4,(a0)
  524. ; r3[6] -= m3 * s;
  525.     fmove.x    fp1,fp4
  526.     fmul.x    fp0,fp4
  527.     lea    $18(a4),a0
  528.     fmove.s    (a0),fp0
  529.     fsub.x    fp4,fp0
  530.     fmove.s    fp0,(a0)
  531. L134
  532. ; s = r0[7];
  533.     move.l    -$98(a5),a1
  534.     fmove.s    $1C(a1),fp0
  535. ; if (s != 0.0) 
  536.     fmove.x    fp0,fp4
  537.     ftst.d    fp4
  538.     fbeq.b    L136
  539. L135
  540. ; r1[7] -= m1 * s;
  541.     fmul.x    fp0,fp3
  542.     move.l    -$9C(a5),a1
  543.     lea    $1C(a1),a0
  544.     fmove.s    (a0),fp4
  545.     fsub.x    fp3,fp4
  546.     fmove.s    fp4,(a0)
  547. ; r2[7] -= m2 * s;
  548.     fmul.x    fp0,fp2
  549.     lea    $1C(a2),a0
  550.     fmove.s    (a0),fp3
  551.     fsub.x    fp2,fp3
  552.     fmove.s    fp3,(a0)
  553. ; r3[7] -= m3 * s;
  554.     fmul.x    fp0,fp1
  555.     lea    $1C(a4),a0
  556.     fmove.s    (a0),fp0
  557.     fsub.x    fp1,fp0
  558.     fmove.s    fp0,(a0)
  559. L136
  560. ; if (fabs(r3[1])>fabs(r2[1])) SWAP_ROWS(r3, r2)
  561.     fmove.s    4(a4),fp0
  562.     fmove.d    fp0,-(a7)
  563.     jsr    _fabs__r
  564.     fmove.x    fp0,fp2
  565.     addq.w    #$8,a7
  566.     fmove.s    4(a2),fp0
  567.     fmove.d    fp0,-(a7)
  568.     jsr    _fabs__r
  569.     addq.w    #$8,a7
  570.     fcmp.x    fp0,fp2
  571.     fbole.b    L138
  572. L137
  573. ; if (fabs(r3[1])>fabs(
  574.     move.l    a4,a0
  575. ; if (fabs(r3[1])>fabs(
  576.     move.l    a2,a4
  577. ; if (fabs(r3[1])>fabs(
  578.     move.l    a0,a2
  579. L138
  580. ; if (fabs(r2[1])>fabs(r1[1])) SWAP_ROWS(r2, r1)
  581.     fmove.s    4(a2),fp0
  582.     fmove.d    fp0,-(a7)
  583.     jsr    _fabs__r
  584.     fmove.x    fp0,fp2
  585.     addq.w    #$8,a7
  586.     move.l    -$9C(a5),a1
  587.     fmove.s    4(a1),fp0
  588.     fmove.d    fp0,-(a7)
  589.     jsr    _fabs__r
  590.     addq.w    #$8,a7
  591.     fcmp.x    fp0,fp2
  592.     fbole.b    L140
  593. L139
  594. ; if (fabs(r2[1])>fabs(
  595.     move.l    a2,a0
  596. ; if (fabs(r2[1])>fabs(
  597.     move.l    -$9C(a5),a2
  598. ; if (fabs(r2[1])>fabs(
  599.     move.l    a0,-$9C(a5)
  600. L140
  601. ; if (0.0 == r1[1])  
  602.     move.l    -$9C(a5),a1
  603.     fmove.s    4(a1),fp0
  604.     ftst.d    fp0
  605.     fbne.b    L142
  606. L141
  607.     moveq    #0,d0
  608.     fmovem.x (a7)+,fp2/fp3/fp4/fp5
  609.     movem.l    (a7)+,a2-a4
  610.     unlk    a5
  611.     rts
  612. L142
  613. ; m2 = r2[1]/r1[1];
  614.     move.l    -$9C(a5),a1
  615.     fmove.s    4(a2),fp2
  616.     fdiv.s    4(a1),fp2
  617. ; m3 = r3[1]/r1[1];
  618.     move.l    -$9C(a5),a1
  619.     fmove.s    4(a4),fp1
  620.     fdiv.s    4(a1),fp1
  621. ; r2[2] -= m2 * r1[2];
  622.     move.l    -$9C(a5),a1
  623.     fmove.x    fp2,fp3
  624.     fmul.s    $8(a1),fp3
  625.     lea    $8(a2),a0
  626.     fmove.s    (a0),fp0
  627.     fsub.x    fp3,fp0
  628.     fmove.s    fp0,(a0)
  629. ; r3[2] -= m3 * r1[2];
  630.     move.l    -$9C(a5),a1
  631.     fmove.x    fp1,fp3
  632.     fmul.s    $8(a1),fp3
  633.     lea    $8(a4),a0
  634.     fmove.s    (a0),fp0
  635.     fsub.x    fp3,fp0
  636.     fmove.s    fp0,(a0)
  637. ; r2[3] -= m2 * r1[3];
  638.     move.l    -$9C(a5),a1
  639.     fmove.x    fp2,fp3
  640.     fmul.s    $C(a1),fp3
  641.     lea    $C(a2),a0
  642.     fmove.s    (a0),fp0
  643.     fsub.x    fp3,fp0
  644.     fmove.s    fp0,(a0)
  645. ; r3[3] -= m3 * r1[3];
  646.     move.l    -$9C(a5),a1
  647.     fmove.x    fp1,fp3
  648.     fmul.s    $C(a1),fp3
  649.     lea    $C(a4),a0
  650.     fmove.s    (a0),fp0
  651.     fsub.x    fp3,fp0
  652.     fmove.s    fp0,(a0)
  653. ; s = r1[4];
  654.     move.l    -$9C(a5),a1
  655.     fmove.s    $10(a1),fp0
  656. ; if (0.0 != s) 
  657.     fmove.x    fp0,fp3
  658.     ftst.d    fp3
  659.     fbeq.b    L144
  660. L143
  661. ; r2[4] -= m2 * s;
  662.     fmove.x    fp2,fp4
  663.     fmul.x    fp0,fp4
  664.     lea    $10(a2),a0
  665.     fmove.s    (a0),fp3
  666.     fsub.x    fp4,fp3
  667.     fmove.s    fp3,(a0)
  668. ; r3[4] -= m3 * s;
  669.     fmove.x    fp1,fp3
  670.     fmul.x    fp0,fp3
  671.     lea    $10(a4),a0
  672.     fmove.s    (a0),fp0
  673.     fsub.x    fp3,fp0
  674.     fmove.s    fp0,(a0)
  675. L144
  676. ; s = r1[5];
  677.     move.l    -$9C(a5),a1
  678.     fmove.s    $14(a1),fp0
  679. ; if (0.0 != s) 
  680.     fmove.x    fp0,fp3
  681.     ftst.d    fp3
  682.     fbeq.b    L146
  683. L145
  684. ; r2[5] -= m2 * s;
  685.     fmove.x    fp2,fp4
  686.     fmul.x    fp0,fp4
  687.     lea    $14(a2),a0
  688.     fmove.s    (a0),fp3
  689.     fsub.x    fp4,fp3
  690.     fmove.s    fp3,(a0)
  691. ; r3[5] -= m3 * s;
  692.     fmove.x    fp1,fp3
  693.     fmul.x    fp0,fp3
  694.     lea    $14(a4),a0
  695.     fmove.s    (a0),fp0
  696.     fsub.x    fp3,fp0
  697.     fmove.s    fp0,(a0)
  698. L146
  699. ; s = r1[6];
  700.     move.l    -$9C(a5),a1
  701.     fmove.s    $18(a1),fp0
  702. ; if (0.0 != s) 
  703.     fmove.x    fp0,fp3
  704.     ftst.d    fp3
  705.     fbeq.b    L148
  706. L147
  707. ; r2[6] -= m2 * s;
  708.     fmove.x    fp2,fp4
  709.     fmul.x    fp0,fp4
  710.     lea    $18(a2),a0
  711.     fmove.s    (a0),fp3
  712.     fsub.x    fp4,fp3
  713.     fmove.s    fp3,(a0)
  714. ; r3[6] -= m3 * s;
  715.     fmove.x    fp1,fp3
  716.     fmul.x    fp0,fp3
  717.     lea    $18(a4),a0
  718.     fmove.s    (a0),fp0
  719.     fsub.x    fp3,fp0
  720.     fmove.s    fp0,(a0)
  721. L148
  722. ; s = r1[7];
  723.     move.l    -$9C(a5),a1
  724.     fmove.s    $1C(a1),fp0
  725. ; if (0.0 != s) 
  726.     fmove.x    fp0,fp3
  727.     ftst.d    fp3
  728.     fbeq.b    L150
  729. L149
  730. ; r2[7] -= m2 * s;
  731.     fmul.x    fp0,fp2
  732.     lea    $1C(a2),a0
  733.     fmove.s    (a0),fp3
  734.     fsub.x    fp2,fp3
  735.     fmove.s    fp3,(a0)
  736. ; r3[7] -= m3 * s;
  737.     fmul.x    fp0,fp1
  738.     lea    $1C(a4),a0
  739.     fmove.s    (a0),fp0
  740.     fsub.x    fp1,fp0
  741.     fmove.s    fp0,(a0)
  742. L150
  743. ; if (fabs(r3[2])>fabs(r2[2])) SWAP_ROWS(r3, r2)
  744.     fmove.s    $8(a4),fp0
  745.     fmove.d    fp0,-(a7)
  746.     jsr    _fabs__r
  747.     fmove.x    fp0,fp2
  748.     addq.w    #$8,a7
  749.     fmove.s    $8(a2),fp0
  750.     fmove.d    fp0,-(a7)
  751.     jsr    _fabs__r
  752.     addq.w    #$8,a7
  753.     fcmp.x    fp0,fp2
  754.     fbole.b    L152
  755. L151
  756. ; if (fabs(r3[2])>fabs(
  757.     move.l    a4,a0
  758. ; if (fabs(r3[2])>fabs(
  759.     move.l    a2,a4
  760. ; if (fabs(r3[2])>fabs(
  761.     move.l    a0,a2
  762. L152
  763. ; if (0.0 == r2[2])  
  764.     fmove.s    $8(a2),fp0
  765.     ftst.d    fp0
  766.     fbne.b    L154
  767. L153
  768.     moveq    #0,d0
  769.     fmovem.x (a7)+,fp2/fp3/fp4/fp5
  770.     movem.l    (a7)+,a2-a4
  771.     unlk    a5
  772.     rts
  773. L154
  774. ; m3 = r3[2]/r2[2];
  775.     fmove.s    $8(a4),fp1
  776.     fdiv.s    $8(a2),fp1
  777. ; r3[3] -= m3 * r2[3], r3[4] -= m3 * r2[4],
  778.     fmove.x    fp1,fp2
  779.     fmul.s    $C(a2),fp2
  780.     lea    $C(a4),a0
  781.     fmove.s    (a0),fp0
  782.     fsub.x    fp2,fp0
  783.     fmove.s    fp0,(a0)
  784.     fmove.x    fp1,fp2
  785.     fmul.s    $10(a2),fp2
  786.     lea    $10(a4),a0
  787.     fmove.s    (a0),fp0
  788.     fsub.x    fp2,fp0
  789.     fmove.s    fp0,(a0)
  790.     fmove.x    fp1,fp2
  791.     fmul.s    $14(a2),fp2
  792.     lea    $14(a4),a0
  793.     fmove.s    (a0),fp0
  794.     fsub.x    fp2,fp0
  795.     fmove.s    fp0,(a0)
  796.     fmove.x    fp1,fp2
  797.     fmul.s    $18(a2),fp2
  798.     lea    $18(a4),a0
  799.     fmove.s    (a0),fp0
  800.     fsub.x    fp2,fp0
  801.     fmove.s    fp0,(a0)
  802.     fmul.s    $1C(a2),fp1
  803.     lea    $1C(a4),a0
  804.     fmove.s    (a0),fp0
  805.     fsub.x    fp1,fp0
  806.     fmove.s    fp0,(a0)
  807. ; if (0.0 == r3[3]) 
  808.     fmove.s    $C(a4),fp0
  809.     ftst.d    fp0
  810.     fbne.b    L156
  811. L155
  812.     moveq    #0,d0
  813.     fmovem.x (a7)+,fp2/fp3/fp4/fp5
  814.     movem.l    (a7)+,a2-a4
  815.     unlk    a5
  816.     rts
  817. L156
  818. ; s = 1.0/r3[3];
  819.     fmove.s    $C(a4),fp0
  820.     fmove.d    #$.3FF00000.00000000,fp1
  821.     fdiv.x    fp0,fp1
  822.     fmove.x    fp1,fp0
  823. ; r3[4] *= s;
  824.     lea    $10(a4),a0
  825.     fmove.s    (a0),fp1
  826.     fmul.x    fp0,fp1
  827.     fmove.s    fp1,(a0)
  828. ; r3[5] *= s;
  829.     lea    $14(a4),a0
  830.     fmove.s    (a0),fp1
  831.     fmul.x    fp0,fp1
  832.     fmove.s    fp1,(a0)
  833. ; r3[6] *= s;
  834.     lea    $18(a4),a0
  835.     fmove.s    (a0),fp1
  836.     fmul.x    fp0,fp1
  837.     fmove.s    fp1,(a0)
  838. ; r3[7] *= s;
  839.     lea    $1C(a4),a0
  840.     fmove.s    (a0),fp1
  841.     fmul.x    fp0,fp1
  842.     fmove.s    fp1,(a0)
  843. ; m2 = r2[3];
  844.     fmove.s    $C(a2),fp2
  845. ; s  = 1.0/r2[2];
  846.     fmove.s    $8(a2),fp0
  847.     fmove.d    #$.3FF00000.00000000,fp1
  848.     fdiv.x    fp0,fp1
  849.     fmove.x    fp1,fp0
  850. ; r2[4] = s * (r2[4] - r3[4] * m2), r2[5] = s * (r2[5] - r3[5] * m2)
  851.     fmove.s    $10(a4),fp3
  852.     fmul.x    fp2,fp3
  853.     fmove.s    $10(a2),fp1
  854.     fsub.x    fp3,fp1
  855.     fmul.x    fp0,fp1
  856.     fmove.s    fp1,$10(a2)
  857.     fmove.s    $14(a4),fp3
  858.     fmul.x    fp2,fp3
  859.     fmove.s    $14(a2),fp1
  860.     fsub.x    fp3,fp1
  861.     fmul.x    fp0,fp1
  862.     fmove.s    fp1,$14(a2)
  863.     fmove.s    $18(a4),fp3
  864.     fmul.x    fp2,fp3
  865.     fmove.s    $18(a2),fp1
  866.     fsub.x    fp3,fp1
  867.     fmul.x    fp0,fp1
  868.     fmove.s    fp1,$18(a2)
  869.     fmove.s    $1C(a4),fp3
  870.     fmul.x    fp2,fp3
  871.     fmove.s    $1C(a2),fp1
  872.     fsub.x    fp3,fp1
  873.     fmul.x    fp1,fp0
  874.     fmove.s    fp0,$1C(a2)
  875. ; m1 = r1[3];
  876.     move.l    -$9C(a5),a1
  877.     fmove.s    $C(a1),fp3
  878. ; r1[4] -= r3[4] * m1, r1[5] -= r3[5] * m1,
  879.     fmove.s    $10(a4),fp1
  880.     fmul.x    fp3,fp1
  881.     move.l    -$9C(a5),a1
  882.     lea    $10(a1),a0
  883.     fmove.s    (a0),fp0
  884.     fsub.x    fp1,fp0
  885.     fmove.s    fp0,(a0)
  886.     fmove.s    $14(a4),fp1
  887.     fmul.x    fp3,fp1
  888.     move.l    -$9C(a5),a1
  889.     lea    $14(a1),a0
  890.     fmove.s    (a0),fp0
  891.     fsub.x    fp1,fp0
  892.     fmove.s    fp0,(a0)
  893.     fmove.s    $18(a4),fp1
  894.     fmul.x    fp3,fp1
  895.     move.l    -$9C(a5),a1
  896.     lea    $18(a1),a0
  897.     fmove.s    (a0),fp0
  898.     fsub.x    fp1,fp0
  899.     fmove.s    fp0,(a0)
  900.     fmove.s    $1C(a4),fp1
  901.     fmul.x    fp3,fp1
  902.     move.l    -$9C(a5),a1
  903.     lea    $1C(a1),a0
  904.     fmove.s    (a0),fp0
  905.     fsub.x    fp1,fp0
  906.     fmove.s    fp0,(a0)
  907. ; m0 = r0[3];
  908.     move.l    -$98(a5),a1
  909.     fmove.s    $C(a1),fp1
  910. ; r0[4] -= r3[4] * m0, r0[5] -= r3[5] * m0,
  911.     fmove.s    $10(a4),fp2
  912.     fmul.x    fp1,fp2
  913.     move.l    -$98(a5),a1
  914.     lea    $10(a1),a0
  915.     fmove.s    (a0),fp0
  916.     fsub.x    fp2,fp0
  917.     fmove.s    fp0,(a0)
  918.     fmove.s    $14(a4),fp2
  919.     fmul.x    fp1,fp2
  920.     move.l    -$98(a5),a1
  921.     lea    $14(a1),a0
  922.     fmove.s    (a0),fp0
  923.     fsub.x    fp2,fp0
  924.     fmove.s    fp0,(a0)
  925.     fmove.s    $18(a4),fp2
  926.     fmul.x    fp1,fp2
  927.     move.l    -$98(a5),a1
  928.     lea    $18(a1),a0
  929.     fmove.s    (a0),fp0
  930.     fsub.x    fp2,fp0
  931.     fmove.s    fp0,(a0)
  932.     fmove.s    $1C(a4),fp2
  933.     fmul.x    fp1,fp2
  934.     move.l    -$98(a5),a1
  935.     lea    $1C(a1),a0
  936.     fmove.s    (a0),fp0
  937.     fsub.x    fp2,fp0
  938.     fmove.s    fp0,(a0)
  939. ; m1 = r1[2];
  940.     move.l    -$9C(a5),a1
  941.     fmove.s    $8(a1),fp3
  942. ; s  = 1.0/r1[1];
  943.     move.l    -$9C(a5),a1
  944.     fmove.s    4(a1),fp0
  945.     fmove.d    #$.3FF00000.00000000,fp1
  946.     fdiv.x    fp0,fp1
  947.     fmove.x    fp1,fp0
  948. ; r1[4] = s * (r1[4] - r2[4] * m1), r1[5] = s * (r1[5] - r2[5] * m1)
  949.     move.l    -$9C(a5),a1
  950.     fmove.s    $10(a2),fp2
  951.     fmul.x    fp3,fp2
  952.     fmove.s    $10(a1),fp1
  953.     fsub.x    fp2,fp1
  954.     fmul.x    fp0,fp1
  955.     move.l    -$9C(a5),a1
  956.     fmove.s    fp1,$10(a1)
  957.     move.l    -$9C(a5),a1
  958.     fmove.s    $14(a2),fp2
  959.     fmul.x    fp3,fp2
  960.     fmove.s    $14(a1),fp1
  961.     fsub.x    fp2,fp1
  962.     fmul.x    fp0,fp1
  963.     move.l    -$9C(a5),a1
  964.     fmove.s    fp1,$14(a1)
  965.     move.l    -$9C(a5),a1
  966.     fmove.s    $18(a2),fp2
  967.     fmul.x    fp3,fp2
  968.     fmove.s    $18(a1),fp1
  969.     fsub.x    fp2,fp1
  970.     fmul.x    fp0,fp1
  971.     move.l    -$9C(a5),a1
  972.     fmove.s    fp1,$18(a1)
  973.     move.l    -$9C(a5),a1
  974.     fmove.s    $1C(a2),fp2
  975.     fmul.x    fp3,fp2
  976.     fmove.s    $1C(a1),fp1
  977.     fsub.x    fp2,fp1
  978.     fmul.x    fp1,fp0
  979.     move.l    -$9C(a5),a1
  980.     fmove.s    fp0,$1C(a1)
  981. ; m0 = r0[2];
  982.     move.l    -$98(a5),a1
  983.     fmove.s    $8(a1),fp1
  984. ; r0[4] -= r2[4] * m0, r0[5] -= r2[5] * m0,
  985.     fmove.s    $10(a2),fp2
  986.     fmul.x    fp1,fp2
  987.     move.l    -$98(a5),a1
  988.     lea    $10(a1),a0
  989.     fmove.s    (a0),fp0
  990.     fsub.x    fp2,fp0
  991.     fmove.s    fp0,(a0)
  992.     fmove.s    $14(a2),fp2
  993.     fmul.x    fp1,fp2
  994.     move.l    -$98(a5),a1
  995.     lea    $14(a1),a0
  996.     fmove.s    (a0),fp0
  997.     fsub.x    fp2,fp0
  998.     fmove.s    fp0,(a0)
  999.     fmove.s    $18(a2),fp2
  1000.     fmul.x    fp1,fp2
  1001.     move.l    -$98(a5),a1
  1002.     lea    $18(a1),a0
  1003.     fmove.s    (a0),fp0
  1004.     fsub.x    fp2,fp0
  1005.     fmove.s    fp0,(a0)
  1006.     fmove.s    $1C(a2),fp2
  1007.     fmul.x    fp1,fp2
  1008.     move.l    -$98(a5),a1
  1009.     lea    $1C(a1),a0
  1010.     fmove.s    (a0),fp0
  1011.     fsub.x    fp2,fp0
  1012.     fmove.s    fp0,(a0)
  1013. ; m0 = r0[1];
  1014.     move.l    -$98(a5),a1
  1015.     fmove.s    4(a1),fp1
  1016. ; s  = 1.0/r0[0];
  1017.     move.l    -$98(a5),a0
  1018.     fmove.s    (a0),fp0
  1019.     fmove.d    #$.3FF00000.00000000,fp2
  1020.     fdiv.x    fp0,fp2
  1021.     fmove.x    fp2,fp0
  1022. ; r0[4] = s * (r0[4] - r1[4] * m0), r0[5] = s * (r0[5] - r1[5] * m0)
  1023.     move.l    -$98(a5),a1
  1024.     fmove.s    $10(a1),fp2
  1025.     move.l    -$9C(a5),a1
  1026.     fmove.s    $10(a1),fp3
  1027.     fmul.x    fp1,fp3
  1028.     fsub.x    fp3,fp2
  1029.     fmul.x    fp0,fp2
  1030.     move.l    -$98(a5),a1
  1031.     fmove.s    fp2,$10(a1)
  1032.     move.l    -$98(a5),a1
  1033.     fmove.s    $14(a1),fp2
  1034.     move.l    -$9C(a5),a1
  1035.     fmove.s    $14(a1),fp3
  1036.     fmul.x    fp1,fp3
  1037.     fsub.x    fp3,fp2
  1038.     fmul.x    fp0,fp2
  1039.     move.l    -$98(a5),a1
  1040.     fmove.s    fp2,$14(a1)
  1041.     move.l    -$98(a5),a1
  1042.     fmove.s    $18(a1),fp2
  1043.     move.l    -$9C(a5),a1
  1044.     fmove.s    $18(a1),fp3
  1045.     fmul.x    fp1,fp3
  1046.     fsub.x    fp3,fp2
  1047.     fmul.x    fp0,fp2
  1048.     move.l    -$98(a5),a1
  1049.     fmove.s    fp2,$18(a1)
  1050.     move.l    -$98(a5),a1
  1051.     fmove.s    $1C(a1),fp2
  1052.     move.l    -$9C(a5),a1
  1053.     fmove.s    $1C(a1),fp3
  1054.     fmul.x    fp1,fp3
  1055.     fsub.x    fp3,fp2
  1056.     fmul.x    fp2,fp0
  1057.     move.l    -$98(a5),a1
  1058.     fmove.s    fp0,$1C(a1)
  1059. ; MAT(out,0,0) = r0[4];
  1060.     move.l    -$98(a5),a1
  1061.     move.l    $C(a5),a0
  1062.     move.l    $10(a1),(a0)
  1063. ; MAT(out,0,1) = r0[5],
  1064.     move.l    -$98(a5),a1
  1065.     fmove.s    $14(a1),fp0
  1066.     move.l    $C(a5),a1
  1067.     fmove.s    fp0,$10(a1)
  1068.     move.l    -$98(a5),a1
  1069.     fmove.s    $18(a1),fp0
  1070.     move.l    $C(a5),a1
  1071.     fmove.s    fp0,$20(a1)
  1072. ; MAT(out,0,3) = r0[7],
  1073.     move.l    -$98(a5),a1
  1074.     fmove.s    $1C(a1),fp0
  1075.     move.l    $C(a5),a1
  1076.     fmove.s    fp0,$30(a1)
  1077.     move.l    -$9C(a5),a1
  1078.     fmove.s    $10(a1),fp0
  1079.     move.l    $C(a5),a1
  1080.     fmove.s    fp0,4(a1)
  1081. ; MAT(out,1,1) = r1[5],
  1082.     move.l    -$9C(a5),a1
  1083.     fmove.s    $14(a1),fp0
  1084.     move.l    $C(a5),a1
  1085.     fmove.s    fp0,$14(a1)
  1086.     move.l    -$9C(a5),a1
  1087.     fmove.s    $18(a1),fp0
  1088.     move.l    $C(a5),a1
  1089.     fmove.s    fp0,$24(a1)
  1090. ; MAT(out,1,3) = r1[7],
  1091.     move.l    -$9C(a5),a1
  1092.     fmove.s    $1C(a1),fp0
  1093.     move.l    $C(a5),a1
  1094.     fmove.s    fp0,$34(a1)
  1095.     move.l    $C(a5),a1
  1096.     move.l    $10(a2),$8(a1)
  1097. ; MAT(out,2,1) = r2[5],
  1098.     move.l    $C(a5),a1
  1099.     move.l    $14(a2),$18(a1)
  1100.     move.l    $C(a5),a1
  1101.     move.l    $18(a2),$28(a1)
  1102. ;            && m[3]==0.0F && m[7]==0.0F && m[11]==0.
  1103.     move.l    $C(a5),a1
  1104.     move.l    $1C(a2),$38(a1)
  1105.     move.l    $C(a5),a1
  1106.     move.l    $10(a4),$C(a1)
  1107. ; MAT(out,3,1) = r3[5],
  1108.     move.l    $C(a5),a1
  1109.     move.l    $14(a4),$1C(a1)
  1110.     move.l    $C(a5),a1
  1111.     move.l    $18(a4),$2C(a1)
  1112. ; MAT(out,3,3) = r3[7];
  1113.     move.l    $C(a5),a1
  1114.     move.l    $1C(a4),$3C(a1)
  1115.     moveq    #1,d0
  1116.     fmovem.x (a7)+,fp2/fp3/fp4/fp5
  1117.     movem.l    (a7)+,a2-a4
  1118.     unlk    a5
  1119.     rts
  1120.  
  1121.     SECTION "_is_identity:0",CODE
  1122.  
  1123.  
  1124. ;static GLboolean is_identity( const GLfloat m[16] )
  1125. _is_identity
  1126.     move.l    4(a7),a0
  1127. L158
  1128. ;   if (   m[0]==1.0F && m[4]==0.0F && m[ 8]==0.0F && m[12]==0.0F
  1129.     fmove.s    (a0),fp0
  1130.     fcmp.s    #$.3F800000,fp0
  1131.     fbne.b    L175
  1132. L159
  1133.     fmove.s    $10(a0),fp0
  1134.     fcmp.s    #$.00000000,fp0
  1135.     fbne.b    L175
  1136. L160
  1137.     fmove.s    $20(a0),fp0
  1138.     fcmp.s    #$.00000000,fp0
  1139.     fbne.b    L175
  1140. L161
  1141.     fmove.s    $30(a0),fp0
  1142.     fcmp.s    #$.00000000,fp0
  1143.     fbne.b    L175
  1144. L162
  1145.     fmove.s    4(a0),fp0
  1146.     fcmp.s    #$.00000000,fp0
  1147.     fbne.b    L175
  1148. L163
  1149.     fmove.s    $14(a0),fp0
  1150.     fcmp.s    #$.3F800000,fp0
  1151.     fbne.b    L175
  1152. L164
  1153.     fmove.s    $24(a0),fp0
  1154.     fcmp.s    #$.00000000,fp0
  1155.     fbne.b    L175
  1156. L165
  1157.     fmove.s    $34(a0),fp0
  1158.     fcmp.s    #$.00000000,fp0
  1159.     fbne.b    L175
  1160. L166
  1161.     fmove.s    $8(a0),fp0
  1162.     fcmp.s    #$.00000000,fp0
  1163.     fbne.b    L175
  1164. L167
  1165.     fmove.s    $18(a0),fp0
  1166.     fcmp.s    #$.00000000,fp0
  1167.     fbne.b    L175
  1168. L168
  1169.     fmove.s    $28(a0),fp0
  1170.     fcmp.s    #$.3F800000,fp0
  1171.     fbne.b    L175
  1172. L169
  1173.     fmove.s    $38(a0),fp0
  1174.     fcmp.s    #$.00000000,fp0
  1175.     fbne.b    L175
  1176. L170
  1177.     fmove.s    $C(a0),fp0
  1178.     fcmp.s    #$.00000000,fp0
  1179.     fbne.b    L175
  1180. L171
  1181.     fmove.s    $1C(a0),fp0
  1182.     fcmp.s    #$.00000000,fp0
  1183.     fbne.b    L175
  1184. L172
  1185.     fmove.s    $2C(a0),fp0
  1186.     fcmp.s    #$.00000000,fp0
  1187.     fbne.b    L175
  1188. L173
  1189.     fmove.s    $3C(a0),fp0
  1190.     fcmp.s    #$.3F800000,fp0
  1191.     fbne.b    L175
  1192. L174
  1193.     moveq    #1,d0
  1194.     rts
  1195. L175
  1196.     moveq    #0,d0
  1197.     rts
  1198.  
  1199.     SECTION "_gl_analyze_modelview_matrix:0",CODE
  1200.  
  1201.  
  1202. ;void gl_analyze_modelview_matrix( GLcontext *ctx )
  1203.     XDEF    _gl_analyze_modelview_matrix
  1204. _gl_analyze_modelview_matrix
  1205.     movem.l    a2/a3,-(a7)
  1206.     move.l    $C(a7),a3
  1207. L176
  1208. ;   const GLfloat *m = ctx->ModelViewMatrix;
  1209.     lea    $9FA(a3),a2
  1210. ;   if (is_identity(m)) 
  1211.     move.l    a2,-(a7)
  1212.     jsr    _is_identity
  1213.     addq.w    #4,a7
  1214.     tst.b    d0
  1215.     beq.b    L178
  1216. L177
  1217. ;      ctx->ModelViewMatrixType = MATRIX_IDENTITY;
  1218.     move.l    a3,a0
  1219.     move.l    #1,$9F6(a0)
  1220.     bra    L208
  1221. L178
  1222. ;   else if (                 m[4]==0.0F && m[ 8]==0.0F      
  1223.     fmove.s    $10(a2),fp0
  1224.     fcmp.s    #$.00000000,fp0
  1225.     fbne.b    L191
  1226. L179
  1227.     fmove.s    $20(a2),fp0
  1228.     fcmp.s    #$.00000000,fp0
  1229.     fbne.b    L191
  1230. L180
  1231.     fmove.s    4(a2),fp0
  1232.     fcmp.s    #$.00000000,fp0
  1233.     fbne.b    L191
  1234. L181
  1235.     fmove.s    $24(a2),fp0
  1236.     fcmp.s    #$.00000000,fp0
  1237.     fbne.b    L191
  1238. L182
  1239.     fmove.s    $8(a2),fp0
  1240.     fcmp.s    #$.00000000,fp0
  1241.     fbne.b    L191
  1242. L183
  1243.     fmove.s    $18(a2),fp0
  1244.     fcmp.s    #$.00000000,fp0
  1245.     fbne.b    L191
  1246. L184
  1247.     fmove.s    $28(a2),fp0
  1248.     fcmp.s    #$.3F800000,fp0
  1249.     fbne.b    L191
  1250. L185
  1251.     fmove.s    $38(a2),fp0
  1252.     fcmp.s    #$.00000000,fp0
  1253.     fbne.b    L191
  1254. L186
  1255.     fmove.s    $C(a2),fp0
  1256.     fcmp.s    #$.00000000,fp0
  1257.     fbne.b    L191
  1258. L187
  1259.     fmove.s    $1C(a2),fp0
  1260.     fcmp.s    #$.00000000,fp0
  1261.     fbne.b    L191
  1262. L188
  1263.     fmove.s    $2C(a2),fp0
  1264.     fcmp.s    #$.00000000,fp0
  1265.     fbne.b    L191
  1266. L189
  1267.     fmove.s    $3C(a2),fp0
  1268.     fcmp.s    #$.3F800000,fp0
  1269.     fbne.b    L191
  1270. L190
  1271. ;      ctx->ModelViewMatrixType = MATRIX_2D_NO_ROT;
  1272.     move.l    a3,a0
  1273.     move.l    #5,$9F6(a0)
  1274.     bra    L208
  1275. L191
  1276. ;   else if (                               m[ 8]==0.0F      
  1277.     fmove.s    $20(a2),fp0
  1278.     fcmp.s    #$.00000000,fp0
  1279.     fbne.b    L202
  1280. L192
  1281.     fmove.s    $24(a2),fp0
  1282.     fcmp.s    #$.00000000,fp0
  1283.     fbne.b    L202
  1284. L193
  1285.     fmove.s    $8(a2),fp0
  1286.     fcmp.s    #$.00000000,fp0
  1287.     fbne.b    L202
  1288. L194
  1289.     fmove.s    $18(a2),fp0
  1290.     fcmp.s    #$.00000000,fp0
  1291.     fbne.b    L202
  1292. L195
  1293.     fmove.s    $28(a2),fp0
  1294.     fcmp.s    #$.3F800000,fp0
  1295.     fbne.b    L202
  1296. L196
  1297.     fmove.s    $38(a2),fp0
  1298.     fcmp.s    #$.00000000,fp0
  1299.     fbne.b    L202
  1300. L197
  1301.     fmove.s    $C(a2),fp0
  1302.     fcmp.s    #$.00000000,fp0
  1303.     fbne.b    L202
  1304. L198
  1305.     fmove.s    $1C(a2),fp0
  1306.     fcmp.s    #$.00000000,fp0
  1307.     fbne.b    L202
  1308. L199
  1309.     fmove.s    $2C(a2),fp0
  1310.     fcmp.s    #$.00000000,fp0
  1311.     fbne.b    L202
  1312. L200
  1313.     fmove.s    $3C(a2),fp0
  1314.     fcmp.s    #$.3F800000,fp0
  1315.     fbne.b    L202
  1316. L201
  1317. ;      ctx->ModelViewMatrixType = MATRIX_2D;
  1318.     move.l    a3,a0
  1319.     move.l    #4,$9F6(a0)
  1320.     bra.b    L208
  1321. L202
  1322. ;   else if (m[3]==0.0F && m[7]==0.0F && m[11]==0.0F && m[15]
  1323.     fmove.s    $C(a2),fp0
  1324.     fcmp.s    #$.00000000,fp0
  1325.     fbne.b    L207
  1326. L203
  1327.     fmove.s    $1C(a2),fp0
  1328.     fcmp.s    #$.00000000,fp0
  1329.     fbne.b    L207
  1330. L204
  1331.     fmove.s    $2C(a2),fp0
  1332.     fcmp.s    #$.00000000,fp0
  1333.     fbne.b    L207
  1334. L205
  1335.     fmove.s    $3C(a2),fp0
  1336.     fcmp.s    #$.3F800000,fp0
  1337.     fbne.b    L207
  1338. L206
  1339. ;      ctx->ModelViewMatrixType = MATRIX_3D;
  1340.     move.l    a3,a0
  1341.     move.l    #6,$9F6(a0)
  1342.     bra.b    L208
  1343. L207
  1344. ;      ctx->ModelViewMatrixType = MATRIX_GENERAL;
  1345.     move.l    a3,a0
  1346.     clr.l    $9F6(a0)
  1347. L208
  1348. ;   if (!invert_matrix( ctx->ModelViewMatrix, ctx->ModelViewInv ))
  1349.     pea    $A3A(a3)
  1350.     pea    $9FA(a3)
  1351.     jsr    _invert_matrix
  1352.     addq.w    #$8,a7
  1353.     tst.b    d0
  1354.     bne.b    L210
  1355. L209
  1356. ; ctx->ModelViewIn
  1357.     pea    $40.w
  1358.     pea    _Identity(a6)
  1359.     pea    $A3A(a3)
  1360.     jsr    _q_memcpy
  1361.     add.w    #$C,a7
  1362. L210
  1363. ;   ctx->NewModelViewMatrix = GL_FALSE;
  1364.     move.l    a3,a0
  1365.     clr.b    $9F4(a0)
  1366.     movem.l    (a7)+,a2/a3
  1367.     rts
  1368.  
  1369.     SECTION "_gl_analyze_projection_matrix:0",CODE
  1370.  
  1371.  
  1372. ;void gl_analyze_projection_matrix( GLcontext *ctx )
  1373.     XDEF    _gl_analyze_projection_matrix
  1374. _gl_analyze_projection_matrix
  1375.     movem.l    a2/a3,-(a7)
  1376.     move.l    $C(a7),a3
  1377. L211
  1378. ;   const GLfloat *m = ctx->ProjectionMatrix;
  1379.     lea    $1284(a3),a2
  1380. ;   if (is_identity(m)) 
  1381.     move.l    a2,-(a7)
  1382.     jsr    _is_identity
  1383.     addq.w    #4,a7
  1384.     tst.b    d0
  1385.     beq.b    L213
  1386. L212
  1387. ;      ctx->ProjectionMatrixType = MATRIX_IDENTITY;
  1388.     move.l    a3,a0
  1389.     move.l    #1,$1280(a0)
  1390.     bra    L236
  1391. L213
  1392. ;      M(1,3) = 0.0F;
  1393.     fmove.s    $10(a2),fp0
  1394.     fcmp.s    #$.00000000,fp0
  1395.     fbne.b    L224
  1396. L214
  1397.     fmove.s    $20(a2),fp0
  1398.     fcmp.s    #$.00000000,fp0
  1399.     fbne.b    L224
  1400. L215
  1401.     fmove.s    4(a2),fp0
  1402.     fcmp.s    #$.00000000,fp0
  1403.     fbne.b    L224
  1404. L216
  1405.     fmove.s    $24(a2),fp0
  1406.     fcmp.s    #$.00000000,fp0
  1407.     fbne.b    L224
  1408. L217
  1409.     fmove.s    $8(a2),fp0
  1410.     fcmp.s    #$.00000000,fp0
  1411.     fbne.b    L224
  1412. L218
  1413.     fmove.s    $18(a2),fp0
  1414.     fcmp.s    #$.00000000,fp0
  1415.     fbne.b    L224
  1416. L219
  1417.     fmove.s    $C(a2),fp0
  1418.     fcmp.s    #$.00000000,fp0
  1419.     fbne.b    L224
  1420. L220
  1421.     fmove.s    $1C(a2),fp0
  1422.     fcmp.s    #$.00000000,fp0
  1423.     fbne.b    L224
  1424. L221
  1425.     fmove.s    $2C(a2),fp0
  1426.     fcmp.s    #$.00000000,fp0
  1427.     fbne.b    L224
  1428. L222
  1429.     fmove.s    $3C(a2),fp0
  1430.     fcmp.s    #$.3F800000,fp0
  1431.     fbne.b    L224
  1432. L223
  1433. ;      ctx->ProjectionMatrixType = MATRIX_ORTHO;
  1434.     move.l    a3,a0
  1435.     move.l    #2,$1280(a0)
  1436.     bra    L236
  1437. L224
  1438. ;   else if (                 m[4]==0.0F                 && m
  1439.     fmove.s    $10(a2),fp0
  1440.     fcmp.s    #$.00000000,fp0
  1441.     fbne.b    L235
  1442. L225
  1443.     fmove.s    $30(a2),fp0
  1444.     fcmp.s    #$.00000000,fp0
  1445.     fbne.b    L235
  1446. L226
  1447.     fmove.s    4(a2),fp0
  1448.     fcmp.s    #$.00000000,fp0
  1449.     fbne.b    L235
  1450. L227
  1451.     fmove.s    $34(a2),fp0
  1452.     fcmp.s    #$.00000000,fp0
  1453.     fbne.b    L235
  1454. L228
  1455.     fmove.s    $8(a2),fp0
  1456.     fcmp.s    #$.00000000,fp0
  1457.     fbne.b    L235
  1458. L229
  1459.     fmove.s    $18(a2),fp0
  1460.     fcmp.s    #$.00000000,fp0
  1461.     fbne.b    L235
  1462. L230
  1463.     fmove.s    $C(a2),fp0
  1464.     fcmp.s    #$.00000000,fp0
  1465.     fbne.b    L235
  1466. L231
  1467.     fmove.s    $1C(a2),fp0
  1468.     fcmp.s    #$.00000000,fp0
  1469.     fbne.b    L235
  1470. L232
  1471.     fmove.s    $2C(a2),fp0
  1472.     fcmp.s    #$.BF800000,fp0
  1473.     fbne.b    L235
  1474. L233
  1475.     fmove.s    $3C(a2),fp0
  1476.     fcmp.s    #$.00000000,fp0
  1477.     fbne.b    L235
  1478. L234
  1479. ;      ctx->ProjectionMatrixType = MATRIX_PERSPECTIVE;
  1480.     move.l    a3,a0
  1481.     move.l    #3,$1280(a0)
  1482.     bra.b    L236
  1483. L235
  1484. ;      ctx->ProjectionMatrixType = MATRIX_GENERAL;
  1485.     move.l    a3,a0
  1486.     clr.l    $1280(a0)
  1487. L236
  1488. ;   ctx->NewProjectionMatrix = GL_FALSE;
  1489.     move.l    a3,a0
  1490.     clr.b    $127E(a0)
  1491.     movem.l    (a7)+,a2/a3
  1492.     rts
  1493.  
  1494.     SECTION "_gl_analyze_texture_matrix:0",CODE
  1495.  
  1496.  
  1497. ;void gl_analyze_texture_matrix( GLcontext *ctx )
  1498.     XDEF    _gl_analyze_texture_matrix
  1499. _gl_analyze_texture_matrix
  1500.     movem.l    d2/a2/a3,-(a7)
  1501.     move.l    $10(a7),a3
  1502. L237
  1503. ;   for (texSet = 0;
  1504.     moveq    #0,d2
  1505.     bra    L258
  1506. L238
  1507. ;      const GLfloat *m = ctx->TextureMatrix[texSet];
  1508.     lea    $1BD2(a3),a0
  1509.     move.l    d2,d0
  1510.     asl.l    #6,d0
  1511.     lea    0(a0,d0.l),a2
  1512. ;      if (is_identity(m)) 
  1513.     move.l    a2,-(a7)
  1514.     jsr    _is_identity
  1515.     addq.w    #4,a7
  1516.     tst.b    d0
  1517.     beq.b    L240
  1518. L239
  1519. ;         ctx->TextureMatrixType[texSet] = MATRIX_IDENTITY;
  1520.     lea    $1BCA(a3),a0
  1521.     move.l    #1,0(a0,d2.l*4)
  1522.     bra    L257
  1523. L240
  1524. ;      else if (                               m[ 8]==0.0F
  1525.     fmove.s    $20(a2),fp0
  1526.     fcmp.s    #$.00000000,fp0
  1527.     fbne.b    L251
  1528. L241
  1529.     fmove.s    $24(a2),fp0
  1530.     fcmp.s    #$.00000000,fp0
  1531.     fbne.b    L251
  1532. L242
  1533.     fmove.s    $8(a2),fp0
  1534.     fcmp.s    #$.00000000,fp0
  1535.     fbne.b    L251
  1536. L243
  1537.     fmove.s    $18(a2),fp0
  1538.     fcmp.s    #$.00000000,fp0
  1539.     fbne.b    L251
  1540. L244
  1541.     fmove.s    $28(a2),fp0
  1542.     fcmp.s    #$.3F800000,fp0
  1543.     fbne.b    L251
  1544. L245
  1545.     fmove.s    $38(a2),fp0
  1546.     fcmp.s    #$.00000000,fp0
  1547.     fbne.b    L251
  1548. L246
  1549.     fmove.s    $C(a2),fp0
  1550.     fcmp.s    #$.00000000,fp0
  1551.     fbne.b    L251
  1552. L247
  1553.     fmove.s    $1C(a2),fp0
  1554.     fcmp.s    #$.00000000,fp0
  1555.     fbne.b    L251
  1556. L248
  1557.     fmove.s    $2C(a2),fp0
  1558.     fcmp.s    #$.00000000,fp0
  1559.     fbne.b    L251
  1560. L249
  1561.     fmove.s    $3C(a2),fp0
  1562.     fcmp.s    #$.3F800000,fp0
  1563.     fbne.b    L251
  1564. L250
  1565. ;         ctx->TextureMatrixType[texSet] = MATRIX_2D;
  1566.     lea    $1BCA(a3),a0
  1567.     move.l    #4,0(a0,d2.l*4)
  1568.     bra.b    L257
  1569. L251
  1570. ;      else if (m[3]==0.0F && m[7]==0.0F && m[11]==0.0F &&
  1571.     fmove.s    $C(a2),fp0
  1572.     fcmp.s    #$.00000000,fp0
  1573.     fbne.b    L256
  1574. L252
  1575.     fmove.s    $1C(a2),fp0
  1576.     fcmp.s    #$.00000000,fp0
  1577.     fbne.b    L256
  1578. L253
  1579.     fmove.s    $2C(a2),fp0
  1580.     fcmp.s    #$.00000000,fp0
  1581.     fbne.b    L256
  1582. L254
  1583.     fmove.s    $3C(a2),fp0
  1584.     fcmp.s    #$.3F800000,fp0
  1585.     fbne.b    L256
  1586. L255
  1587. ;         ctx->TextureMatrixType[texSet] = MATRIX_3D;
  1588.     lea    $1BCA(a3),a0
  1589.     move.l    #6,0(a0,d2.l*4)
  1590.     bra.b    L257
  1591. L256
  1592. ;         ctx->TextureMatrixType[texSet] = MATRIX_GENERAL;
  1593.     lea    $1BCA(a3),a0
  1594.     clr.l    0(a0,d2.l*4)
  1595. L257
  1596.     addq.l    #1,d2
  1597. L258
  1598.     cmp.l    #2,d2
  1599.     blo    L238
  1600. L259
  1601. ;   ctx->NewTextureMatrix = GL_FALSE;
  1602.     move.l    a3,a0
  1603.     clr.b    $1BC8(a0)
  1604.     movem.l    (a7)+,d2/a2/a3
  1605.     rts
  1606.  
  1607.     SECTION "_gl_Frustum:0",CODE
  1608.  
  1609.  
  1610. ;void gl_Frustum( GLcontext *ctx,
  1611.     XDEF    _gl_Frustum
  1612. _gl_Frustum
  1613. L267    EQU    -$64
  1614.     link    a5,#L267
  1615.     move.l    a2,-(a7)
  1616.     fmovem.x fp2/fp3/fp4/fp5/fp6/fp7,-(a7)
  1617.     move.l    $8(a5),a2
  1618.     fmove.d    $2C(a5),fp2
  1619.     fmove.d    $34(a5),fp3
  1620.     fmove.d    $24(a5),fp4
  1621.     fmove.d    $14(a5),fp5
  1622.     fmove.d    $1C(a5),fp7
  1623. L261
  1624. ;   if (nearval<=0.0 || farval<=0.0) 
  1625.     fcmp.d    #$.00000000.00000000,fp2
  1626.     fbole.b    L263
  1627. L262
  1628.     fcmp.d    #$.00000000.00000000,fp3
  1629.     fbogt.b    L264
  1630. L263
  1631. ;      gl_error( ctx,  GL_INVALID_VALUE, "glFrustum(near or far)
  1632.     move.l    #L260,-(a7)
  1633.     pea    $501.w
  1634.     move.l    a2,-(a7)
  1635.     jsr    _gl_error
  1636.     add.w    #$C,a7
  1637. L264
  1638. ;   x = (2.0*nearval) / (right-left);
  1639.     fmove.x    fp2,fp0
  1640.     fmul.d    #$.40000000.00000000,fp0
  1641.     fmove.x    fp5,fp1
  1642.     fsub.d    $C(a5),fp1
  1643.     fdiv.x    fp1,fp0
  1644.     fmove.s    fp0,-4(a5)
  1645. ;   y = (2.0*nearval) / (top-bottom);
  1646.     fmove.x    fp2,fp0
  1647.     fmul.d    #$.40000000.00000000,fp0
  1648.     fmove.x    fp4,fp1
  1649.     fsub.x    fp7,fp1
  1650.     fdiv.x    fp1,fp0
  1651.     fmove.s    fp0,-$8(a5)
  1652. ;   a = (right+left) / (right-left);
  1653.     fmove.x    fp5,fp0
  1654.     fadd.d    $C(a5),fp0
  1655.     fsub.d    $C(a5),fp5
  1656.     fdiv.x    fp5,fp0
  1657.     fmove.s    fp0,-$C(a5)
  1658. ;   b = (top+bottom) / (top-bottom);
  1659.     fmove.x    fp4,fp0
  1660.     fadd.x    fp7,fp0
  1661.     fsub.x    fp7,fp4
  1662.     fdiv.x    fp4,fp0
  1663.     fmove.x    fp0,fp5
  1664. ;   c = -(farval+nearval) / ( farval-nearval);
  1665.     fmove.x    fp3,fp0
  1666.     fadd.x    fp2,fp0
  1667.     fneg.d    fp0
  1668.     fmove.x    fp3,fp1
  1669.     fsub.x    fp2,fp1
  1670.     fdiv.x    fp1,fp0
  1671.     fmove.x    fp0,fp4
  1672. ;   d = -(2.0*farval*nearval) / (farval-nearval);
  1673.     fmove.x    fp3,fp0
  1674.     fmul.d    #$.40000000.00000000,fp0
  1675.     fmul.x    fp2,fp0
  1676.     fneg.d    fp0
  1677.     fmove.x    fp3,fp1
  1678.     fsub.x    fp2,fp1
  1679.     fdiv.x    fp1,fp0
  1680. ;   M(0,0) = x;
  1681.     move.l    -4(a5),-$58(a5)
  1682. ;     M(0,1) = 0.0F;
  1683.     lea    -$58(a5),a0
  1684.     clr.l    $10(a0)
  1685. ;  M(0,2) = a;
  1686.     lea    -$58(a5),a0
  1687.     move.l    -$C(a5),$20(a0)
  1688. ;      M(0,3) = 0.0F;
  1689.     lea    -$58(a5),a0
  1690.     clr.l    $30(a0)
  1691. ;   M(1,0) = 0.0F;
  1692.     lea    -$58(a5),a0
  1693.     clr.l    4(a0)
  1694. ;  M(1,1) = y;
  1695.     lea    -$58(a5),a0
  1696.     move.l    -$8(a5),$14(a0)
  1697. ;     M(1,2) = b;
  1698.     lea    -$58(a5),a0
  1699.     fmove.s    fp5,$24(a0)
  1700. ;      M(1,3) = 0.0F;
  1701.     lea    -$58(a5),a0
  1702.     clr.l    $34(a0)
  1703. ;   M(2,0) = 0.0F;
  1704.     lea    -$58(a5),a0
  1705.     clr.l    $8(a0)
  1706. ;  M(2,1) = 0.0F;
  1707.     lea    -$58(a5),a0
  1708.     clr.l    $18(a0)
  1709. ;  M(2,2) = c;
  1710.     lea    -$58(a5),a0
  1711.     fmove.s    fp4,$28(a0)
  1712. ;      M(2,3) = d;
  1713.     lea    -$58(a5),a0
  1714.     fmove.s    fp0,$38(a0)
  1715. ;   M(3,0) = 0.0F;
  1716.     lea    -$58(a5),a0
  1717.     clr.l    $C(a0)
  1718. ;  M(3,1) = 0.0F;
  1719.     lea    -$58(a5),a0
  1720.     clr.l    $1C(a0)
  1721. ;  M(3,2) = -1.0F;
  1722.     lea    -$58(a5),a0
  1723.     move.l    #$BF800000,$2C(a0)
  1724. ;  M(3,3) = 0.0F;
  1725.     lea    -$58(a5),a0
  1726.     clr.l    $3C(a0)
  1727. ;   gl_MultMatrixf( ctx, m );
  1728.     pea    -$58(a5)
  1729.     move.l    a2,-(a7)
  1730.     jsr    _gl_MultMatrixf
  1731.     addq.w    #$8,a7
  1732. ;   ctx->NearFarStack[ctx->ProjectionStackDepth][0] = nearval;
  1733.     fmove.x    fp2,fp0
  1734.     lea    $1AC8(a2),a0
  1735.     move.l    $12C4(a2),d0
  1736.     fmove.s    fp0,0(a0,d0.l*8)
  1737. ;   ctx->NearFarStack[ctx->ProjectionStackDepth][1] = farval;
  1738.     fmove.x    fp3,fp0
  1739.     lea    $1AC8(a2),a0
  1740.     move.l    $12C4(a2),d0
  1741.     lea    0(a0,d0.l*8),a0
  1742.     fmove.s    fp0,4(a0)
  1743. ;   if (ctx->Driver.NearFar) 
  1744.     tst.l    $97C(a2)
  1745.     beq.b    L266
  1746. L265
  1747. ;      (*ctx->Driver.NearFar)( ctx, nearval, farval );
  1748.     fmove.x    fp3,fp0
  1749.     fmove.s    fp0,-(a7)
  1750.     fmove.x    fp2,fp0
  1751.     fmove.s    fp0,-(a7)
  1752.     move.l    a2,-(a7)
  1753.     move.l    $97C(a2),a0
  1754.     jsr    (a0)
  1755.     add.w    #$C,a7
  1756. L266
  1757.     fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
  1758.     move.l    (a7)+,a2
  1759.     unlk    a5
  1760.     rts
  1761.  
  1762. L260
  1763.     dc.b    'glFrustum(near or far)',0
  1764.  
  1765.     SECTION "_gl_Ortho:0",CODE
  1766.  
  1767.  
  1768. ;void gl_Ortho( GLcontext *ctx,
  1769.     XDEF    _gl_Ortho
  1770. _gl_Ortho
  1771. L271    EQU    -$64
  1772.     link    a5,#L271
  1773.     move.l    a2,-(a7)
  1774.     fmovem.x fp2/fp3/fp4/fp5/fp6/fp7,-(a7)
  1775.     move.l    $8(a5),a2
  1776.     fmove.d    $24(a5),fp1
  1777.     fmove.d    $14(a5),fp2
  1778.     fmove.d    $2C(a5),fp3
  1779.     fmove.d    $34(a5),fp4
  1780.     fmove.d    $1C(a5),fp5
  1781.     fmove.d    $C(a5),fp7
  1782. L268
  1783. ;   x = 2.0 / (right-left);
  1784.     fmove.x    fp2,fp0
  1785.     fsub.x    fp7,fp0
  1786.     fmove.d    #$.40000000.00000000,fp6
  1787.     fdiv.x    fp0,fp6
  1788.     fmove.x    fp6,fp0
  1789.     fmove.s    fp0,-4(a5)
  1790. ;   y = 2.0 / (top-bottom);
  1791.     fmove.x    fp1,fp0
  1792.     fsub.x    fp5,fp0
  1793.     fmove.d    #$.40000000.00000000,fp6
  1794.     fdiv.x    fp0,fp6
  1795.     fmove.x    fp6,fp0
  1796.     fmove.s    fp0,-$8(a5)
  1797. ;   z = -2.0 / (farval-nearval);
  1798.     fmove.x    fp4,fp0
  1799.     fsub.x    fp3,fp0
  1800.     fmove.d    #$.C0000000.00000000,fp6
  1801.     fdiv.x    fp0,fp6
  1802.     fmove.x    fp6,fp0
  1803.     fmove.s    fp0,-$C(a5)
  1804. ;   tx = -(right+left) / (right-left);
  1805.     fmove.x    fp2,fp0
  1806.     fadd.x    fp7,fp0
  1807.     fneg.d    fp0
  1808.     fsub.x    fp7,fp2
  1809.     fdiv.x    fp2,fp0
  1810.     fmove.x    fp0,fp6
  1811. ;   ty = -(top+bottom) / (top-bottom);
  1812.     fmove.x    fp1,fp0
  1813.     fadd.x    fp5,fp0
  1814.     fneg.d    fp0
  1815.     fsub.x    fp5,fp1
  1816.     fdiv.x    fp1,fp0
  1817.     fmove.x    fp0,fp2
  1818. ;   tz = -(farval+nearval) / (farval-nearval);
  1819.     fmove.x    fp4,fp0
  1820.     fadd.x    fp3,fp0
  1821.     fneg.d    fp0
  1822.     fmove.x    fp4,fp1
  1823.     fsub.x    fp3,fp1
  1824.     fdiv.x    fp1,fp0
  1825. ;   M(0,0) = x;
  1826.     move.l    -4(a5),-$58(a5)
  1827. ;     M(0,1) = 0.0F;
  1828.     lea    -$58(a5),a0
  1829.     clr.l    $10(a0)
  1830. ;  M(0,2) = 0.0F;
  1831.     lea    -$58(a5),a0
  1832.     clr.l    $20(a0)
  1833. ;  M(0,3) = tx;
  1834.     lea    -$58(a5),a0
  1835.     fmove.s    fp6,$30(a0)
  1836. ;   M(1,0) = 0.0F;
  1837.     lea    -$58(a5),a0
  1838.     clr.l    4(a0)
  1839. ;  M(1,1) = y;
  1840.     lea    -$58(a5),a0
  1841.     move.l    -$8(a5),$14(a0)
  1842. ;     M(1,2) = 0.0F;
  1843.     lea    -$58(a5),a0
  1844.     clr.l    $24(a0)
  1845. ;  M(1,3) = ty;
  1846.     lea    -$58(a5),a0
  1847.     fmove.s    fp2,$34(a0)
  1848. ;   M(2,0) = 0.0F;
  1849.     lea    -$58(a5),a0
  1850.     clr.l    $8(a0)
  1851. ;  M(2,1) = 0.0F;
  1852.     lea    -$58(a5),a0
  1853.     clr.l    $18(a0)
  1854. ;  M(2,2) = z;
  1855.     lea    -$58(a5),a0
  1856.     move.l    -$C(a5),$28(a0)
  1857. ;     M(2,3) = tz;
  1858.     lea    -$58(a5),a0
  1859.     fmove.s    fp0,$38(a0)
  1860. ;   M(3,0) = 0.0F;
  1861.     lea    -$58(a5),a0
  1862.     clr.l    $C(a0)
  1863. ;  M(3,1) = 0.0F;
  1864.     lea    -$58(a5),a0
  1865.     clr.l    $1C(a0)
  1866. ;  M(3,2) = 0.0F;
  1867.     lea    -$58(a5),a0
  1868.     clr.l    $2C(a0)
  1869. ;  M(3,3) = 1.0F;
  1870.     lea    -$58(a5),a0
  1871.     move.l    #$3F800000,$3C(a0)
  1872. ;   gl_MultMatrixf( ctx, m );
  1873.     pea    -$58(a5)
  1874.     move.l    a2,-(a7)
  1875.     jsr    _gl_MultMatrixf
  1876.     addq.w    #$8,a7
  1877. ;   if (ctx->Driver.NearFar) 
  1878.     tst.l    $97C(a2)
  1879.     beq.b    L270
  1880. L269
  1881. ;      (*ctx->Driver.NearFar)( ctx, nearval, farval );
  1882.     fmove.x    fp4,fp0
  1883.     fmove.s    fp0,-(a7)
  1884.     fmove.x    fp3,fp0
  1885.     fmove.s    fp0,-(a7)
  1886.     move.l    a2,-(a7)
  1887.     move.l    $97C(a2),a0
  1888.     jsr    (a0)
  1889.     add.w    #$C,a7
  1890. L270
  1891.     fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
  1892.     move.l    (a7)+,a2
  1893.     unlk    a5
  1894.     rts
  1895.  
  1896.     SECTION "_gl_MatrixMode:0",CODE
  1897.  
  1898.  
  1899. ;void gl_MatrixMode( GLcontext *ctx, GLenum mode )
  1900.     XDEF    _gl_MatrixMode
  1901. _gl_MatrixMode
  1902.     move.l    $8(a7),d0
  1903.     move.l    4(a7),a0
  1904. L273
  1905. ;   if (INSIDE_BEGIN_END(ctx)) 
  1906.     move.l    a0,a1
  1907.     add.l    #$E968,a1
  1908.     move.l    (a1),d1
  1909.     cmp.l    #$1A00,d1
  1910.     beq.b    L275
  1911. L274
  1912. ;      gl_error( ctx,  GL_INVALID_OPERATION, "glMatrixMode" );
  1913.     move.l    #L272,-(a7)
  1914.     pea    $502.w
  1915.     move.l    a0,-(a7)
  1916.     jsr    _gl_error
  1917.     add.w    #$C,a7
  1918.     rts
  1919. L275
  1920. ;   switch (mode)
  1921.     move.l    d0,d1
  1922.     cmp.l    #$1701,d1
  1923.     beq.b    L276
  1924.     bgt.b    L279
  1925.     cmp.l    #$1700,d1
  1926.     beq.b    L276
  1927.     bra.b    L277
  1928. L279
  1929.     cmp.l    #$1702,d1
  1930.     beq.b    L276
  1931.     bra.b    L277
  1932. ;      
  1933. L276
  1934. ;         ctx->Transform.MatrixMode = mode;
  1935.     add.l    #$E4D2,a0
  1936.     move.l    d0,(a0)
  1937. ;         
  1938.     bra.b    L278
  1939. L277
  1940. ;         gl_error( ctx,  GL_INVALID_ENUM, "glMatrixMode" );
  1941.     move.l    #L272,-(a7)
  1942.     pea    $500.w
  1943.     move.l    a0,-(a7)
  1944.     jsr    _gl_error
  1945.     add.w    #$C,a7
  1946. L278
  1947.     rts
  1948.  
  1949. L272
  1950.     dc.b    'glMatrixMode',0
  1951.  
  1952.     SECTION "_gl_PushMatrix:0",CODE
  1953.  
  1954.  
  1955. ;void gl_PushMatrix( GLcontext *ctx )
  1956.     XDEF    _gl_PushMatrix
  1957. _gl_PushMatrix
  1958.     movem.l    d2/a2,-(a7)
  1959.     move.l    $C(a7),a2
  1960. L282
  1961. ;   if (INSIDE_BEGIN_END(ctx)) 
  1962.     move.l    a2,a0
  1963.     add.l    #$E968,a0
  1964.     move.l    (a0),d0
  1965.     cmp.l    #$1A00,d0
  1966.     beq.b    L284
  1967. L283
  1968. ;      gl_error( ctx,  GL_INVALID_OPERATION, "glPushMatrix" );
  1969.     move.l    #L280,-(a7)
  1970.     pea    $502.w
  1971.     move.l    a2,-(a7)
  1972.     jsr    _gl_error
  1973.     add.w    #$C,a7
  1974.     movem.l    (a7)+,d2/a2
  1975.     rts
  1976. L284
  1977. ;   switch (ctx->Transform.MatrixMode)
  1978.     move.l    a2,a0
  1979.     add.l    #$E4D2,a0
  1980.     move.l    (a0),d0
  1981.     cmp.l    #$1701,d0
  1982.     beq.b    L288
  1983.     bgt.b    L296
  1984.     cmp.l    #$1700,d0
  1985.     beq.b    L285
  1986.     bra    L294
  1987. L296
  1988.     cmp.l    #$1702,d0
  1989.     beq    L291
  1990.     bra    L294
  1991. ;      
  1992. L285
  1993. ;         if (ctx->ModelViewStackDepth>=MAX_MODELVIEW_STACK_
  1994.     move.l    $A7A(a2),d0
  1995.     cmp.l    #$1F,d0
  1996.     blo.b    L287
  1997. L286
  1998. ;            gl_error( ctx,  GL_STACK_OVERFLOW, "glPushMa
  1999.     move.l    #L280,-(a7)
  2000.     pea    $503.w
  2001.     move.l    a2,-(a7)
  2002.     jsr    _gl_error
  2003.     add.w    #$C,a7
  2004.     movem.l    (a7)+,d2/a2
  2005.     rts
  2006. L287
  2007. ;                 16*sizeof(GLflo
  2008.     pea    $40.w
  2009.     pea    $9FA(a2)
  2010.     lea    $A7E(a2),a0
  2011.     move.l    $A7A(a2),d0
  2012.     asl.l    #6,d0
  2013.     pea    0(a0,d0.l)
  2014.     jsr    _q_memcpy
  2015.     add.w    #$C,a7
  2016. ;         ctx->ModelViewStackDepth++;
  2017.     addq.l    #1,$A7A(a2)
  2018. ;         
  2019.     bra    L295
  2020. L288
  2021. ;         if (ctx->ProjectionStackDepth>=MAX_PROJECTION_STAC
  2022.     move.l    $12C4(a2),d0
  2023.     cmp.l    #$20,d0
  2024.     blo.b    L290
  2025. L289
  2026. ;            gl_error( ctx,  GL_STACK_OVERFLOW, "glPushMa
  2027.     move.l    #L280,-(a7)
  2028.     pea    $503.w
  2029.     move.l    a2,-(a7)
  2030.     jsr    _gl_error
  2031.     add.w    #$C,a7
  2032.     movem.l    (a7)+,d2/a2
  2033.     rts
  2034. L290
  2035. ;                 16*sizeof(GLflo
  2036.     pea    $40.w
  2037.     pea    $1284(a2)
  2038.     lea    $12C8(a2),a0
  2039.     move.l    $12C4(a2),d0
  2040.     asl.l    #6,d0
  2041.     pea    0(a0,d0.l)
  2042.     jsr    _q_memcpy
  2043.     add.w    #$C,a7
  2044. ;         ctx->ProjectionStackDepth++;
  2045.     addq.l    #1,$12C4(a2)
  2046. ;         ctx->NearFarStack[ctx->ProjectionStackDepth][0]
  2047.     move.l    $12C4(a2),d0
  2048.     subq.l    #1,d0
  2049.     lea    $1AC8(a2),a0
  2050.     fmove.s    0(a0,d0.l*8),fp0
  2051.     lea    $1AC8(a2),a0
  2052.     move.l    $12C4(a2),d0
  2053.     fmove.s    fp0,0(a0,d0.l*8)
  2054. ;         ctx->NearFarStack[ctx->ProjectionStackDepth][1]
  2055.     move.l    $12C4(a2),d0
  2056.     subq.l    #1,d0
  2057.     lea    $1AC8(a2),a0
  2058.     lea    0(a0,d0.l*8),a0
  2059.     fmove.s    4(a0),fp0
  2060.     lea    $1AC8(a2),a0
  2061.     move.l    $12C4(a2),d0
  2062.     lea    0(a0,d0.l*8),a0
  2063.     fmove.s    fp0,4(a0)
  2064. ;         
  2065.     bra    L295
  2066. L291
  2067. ;            GLuint texSet = ctx->Texture.CurrentTransfor
  2068.     move.l    a2,a0
  2069.     add.l    #$DEBA,a0
  2070.     move.l    4(a0),d2
  2071. ;            if (ctx->TextureStackDepth[texSet] >= MAX_TE
  2072.     lea    $1C52(a2),a0
  2073.     move.l    0(a0,d2.l*4),d0
  2074.     cmp.l    #$A,d0
  2075.     blo.b    L293
  2076. L292
  2077. ;               gl_error( ctx,  GL_STACK_OVERFLOW, "gl
  2078.     move.l    #L280,-(a7)
  2079.     pea    $503.w
  2080.     move.l    a2,-(a7)
  2081.     jsr    _gl_error
  2082.     add.w    #$C,a7
  2083.     movem.l    (a7)+,d2/a2
  2084.     rts
  2085. L293
  2086. ;                    16*sizeof
  2087.     pea    $40.w
  2088.     lea    $1BD2(a2),a0
  2089.     move.l    d2,d0
  2090.     asl.l    #6,d0
  2091.     pea    0(a0,d0.l)
  2092.     lea    $1C5A(a2),a0
  2093.     move.l    d2,d0
  2094.     muls.l    #$280,d0
  2095.     lea    0(a0,d0.l),a1
  2096.     lea    $1C52(a2),a0
  2097.     move.l    0(a0,d2.l*4),d0
  2098.     asl.l    #6,d0
  2099.     pea    0(a1,d0.l)
  2100.     jsr    _q_memcpy
  2101.     add.w    #$C,a7
  2102. ;            ctx->TextureStackDepth[texSet]++;
  2103.     lea    $1C52(a2),a0
  2104.     lea    0(a0,d2.l*4),a0
  2105.     addq.l    #1,(a0)
  2106. ;         
  2107.     bra.b    L295
  2108. L294
  2109. ;         gl_problem(ctx, "Bad matrix mode in gl_PushMatrix")
  2110.     move.l    #L281,-(a7)
  2111.     move.l    a2,-(a7)
  2112.     jsr    _gl_problem
  2113.     addq.w    #$8,a7
  2114. L295
  2115.     movem.l    (a7)+,d2/a2
  2116.     rts
  2117.  
  2118. L281
  2119.     dc.b    'Bad matrix mode in gl_PushMatrix',0
  2120. L280
  2121.     dc.b    'glPushMatrix',0
  2122.  
  2123.     SECTION "_gl_PopMatrix:0",CODE
  2124.  
  2125.  
  2126. ;void gl_PopMatrix( GLcontext *ctx )
  2127.     XDEF    _gl_PopMatrix
  2128. _gl_PopMatrix
  2129.     movem.l    d2/a2,-(a7)
  2130.     move.l    $C(a7),a2
  2131. L299
  2132. ;   if (INSIDE_BEGIN_END(ctx)) 
  2133.     move.l    a2,a0
  2134.     add.l    #$E968,a0
  2135.     move.l    (a0),d0
  2136.     cmp.l    #$1A00,d0
  2137.     beq.b    L301
  2138. L300
  2139. ;      gl_error( ctx,  GL_INVALID_OPERATION, "glPopMatrix" );
  2140.     move.l    #L297,-(a7)
  2141.     pea    $502.w
  2142.     move.l    a2,-(a7)
  2143.     jsr    _gl_error
  2144.     add.w    #$C,a7
  2145.     movem.l    (a7)+,d2/a2
  2146.     rts
  2147. L301
  2148. ;   switch (ctx->Transform.MatrixMode)
  2149.     move.l    a2,a0
  2150.     add.l    #$E4D2,a0
  2151.     move.l    (a0),d0
  2152.     cmp.l    #$1701,d0
  2153.     beq.b    L305
  2154.     bgt.b    L315
  2155.     cmp.l    #$1700,d0
  2156.     beq.b    L302
  2157.     bra    L313
  2158. L315
  2159.     cmp.l    #$1702,d0
  2160.     beq    L310
  2161.     bra    L313
  2162. ;      
  2163. L302
  2164. ;         if (ctx->ModelViewStackDepth==0) 
  2165.     tst.l    $A7A(a2)
  2166.     bne.b    L304
  2167. L303
  2168. ;            gl_error( ctx,  GL_STACK_UNDERFLOW, "glPopMa
  2169.     move.l    #L297,-(a7)
  2170.     pea    $504.w
  2171.     move.l    a2,-(a7)
  2172.     jsr    _gl_error
  2173.     add.w    #$C,a7
  2174.     movem.l    (a7)+,d2/a2
  2175.     rts
  2176. L304
  2177. ;         ctx->ModelViewStackDepth--;
  2178.     subq.l    #1,$A7A(a2)
  2179. ;                 16*sizeof(GLflo
  2180.     pea    $40.w
  2181.     lea    $A7E(a2),a0
  2182.     move.l    $A7A(a2),d0
  2183.     asl.l    #6,d0
  2184.     pea    0(a0,d0.l)
  2185.     pea    $9FA(a2)
  2186.     jsr    _q_memcpy
  2187.     add.w    #$C,a7
  2188. ;         ctx->NewModelViewMatrix = GL_TRUE;
  2189.     move.b    #1,$9F4(a2)
  2190. ;         
  2191.     bra    L314
  2192. L305
  2193. ;         if (ctx->ProjectionStackDepth==0) 
  2194.     tst.l    $12C4(a2)
  2195.     bne.b    L307
  2196. L306
  2197. ;            gl_error( ctx,  GL_STACK_UNDERFLOW, "glPopMa
  2198.     move.l    #L297,-(a7)
  2199.     pea    $504.w
  2200.     move.l    a2,-(a7)
  2201.     jsr    _gl_error
  2202.     add.w    #$C,a7
  2203.     movem.l    (a7)+,d2/a2
  2204.     rts
  2205. L307
  2206. ;         ctx->ProjectionStackDepth--;
  2207.     subq.l    #1,$12C4(a2)
  2208. ;                 16*sizeof(GLflo
  2209.     pea    $40.w
  2210.     lea    $12C8(a2),a0
  2211.     move.l    $12C4(a2),d0
  2212.     asl.l    #6,d0
  2213.     pea    0(a0,d0.l)
  2214.     pea    $1284(a2)
  2215.     jsr    _q_memcpy
  2216.     add.w    #$C,a7
  2217. ;         ctx->NewProjectionMatrix = GL_TRUE;
  2218.     move.b    #1,$127E(a2)
  2219. ;            GLfloat nearVal = ctx->NearFarStack[ctx->Pro
  2220.     lea    $1AC8(a2),a0
  2221.     move.l    $12C4(a2),d0
  2222.     fmove.s    0(a0,d0.l*8),fp1
  2223. ;            GLfloat farVal  = ctx->NearFarStack[ctx->Pro
  2224.     lea    $1AC8(a2),a0
  2225.     move.l    $12C4(a2),d0
  2226.     lea    0(a0,d0.l*8),a0
  2227.     fmove.s    4(a0),fp0
  2228. ;            if (ctx->Driver.NearFar) 
  2229.     tst.l    $97C(a2)
  2230.     beq.b    L309
  2231. L308
  2232. ;               (*ctx->Driver.NearFar)( ctx, nearVal, 
  2233.     fmove.s    fp0,-(a7)
  2234.     fmove.s    fp1,-(a7)
  2235.     move.l    a2,-(a7)
  2236.     move.l    $97C(a2),a0
  2237.     jsr    (a0)
  2238.     add.w    #$C,a7
  2239. L309
  2240. ;         
  2241.     bra    L314
  2242. L310
  2243. ;            GLuint texSet = ctx->Texture.CurrentTransfor
  2244.     move.l    a2,a0
  2245.     add.l    #$DEBA,a0
  2246.     move.l    4(a0),d0
  2247. ;            if (ctx->TextureStackDepth[texSet]==0) 
  2248.     lea    $1C52(a2),a0
  2249.     tst.l    0(a0,d0.l*4)
  2250.     bne.b    L312
  2251. L311
  2252. ;               gl_error( ctx,  GL_STACK_UNDERFLOW, "g
  2253.     move.l    #L297,-(a7)
  2254.     pea    $504.w
  2255.     move.l    a2,-(a7)
  2256.     jsr    _gl_error
  2257.     add.w    #$C,a7
  2258.     movem.l    (a7)+,d2/a2
  2259.     rts
  2260. L312
  2261. ;            ctx->TextureStackDepth[texSet]--;
  2262.     lea    $1C52(a2),a0
  2263.     lea    0(a0,d0.l*4),a0
  2264.     subq.l    #1,(a0)
  2265. ;                    16*sizeof
  2266.     pea    $40.w
  2267.     lea    $1C5A(a2),a0
  2268.     move.l    d0,d1
  2269.     muls.l    #$280,d1
  2270.     lea    0(a0,d1.l),a1
  2271.     lea    $1C52(a2),a0
  2272.     move.l    0(a0,d0.l*4),d1
  2273.     asl.l    #6,d1
  2274.     pea    0(a1,d1.l)
  2275.     lea    $1BD2(a2),a0
  2276.     asl.l    #6,d0
  2277.     pea    0(a0,d0.l)
  2278.     jsr    _q_memcpy
  2279.     add.w    #$C,a7
  2280. ;            ctx->NewTextureMatrix = GL_TRUE;
  2281.     move.b    #1,$1BC8(a2)
  2282. ;         
  2283.     bra.b    L314
  2284. L313
  2285. ;         gl_problem(ctx, "Bad matrix mode in gl_PopMatrix");
  2286.     move.l    #L298,-(a7)
  2287.     move.l    a2,-(a7)
  2288.     jsr    _gl_problem
  2289.     addq.w    #$8,a7
  2290. L314
  2291.     movem.l    (a7)+,d2/a2
  2292.     rts
  2293.  
  2294. L298
  2295.     dc.b    'Bad matrix mode in gl_PopMatrix',0
  2296. L297
  2297.     dc.b    'glPopMatrix',0
  2298.  
  2299.     SECTION "_gl_LoadIdentity:0",CODE
  2300.  
  2301.  
  2302. ;void gl_LoadIdentity( GLcontext *ctx )
  2303.     XDEF    _gl_LoadIdentity
  2304. _gl_LoadIdentity
  2305.     movem.l    d2/a2,-(a7)
  2306.     move.l    $C(a7),a2
  2307. L318
  2308. ;   if (INSIDE_BEGIN_END(ctx)) 
  2309.     move.l    a2,a0
  2310.     add.l    #$E968,a0
  2311.     move.l    (a0),d0
  2312.     cmp.l    #$1A00,d0
  2313.     beq.b    L320
  2314. L319
  2315. ;      gl_error( ctx,  GL_INVALID_OPERATION, "glLoadIdentity" );
  2316.     move.l    #L316,-(a7)
  2317.     pea    $502.w
  2318.     move.l    a2,-(a7)
  2319.     jsr    _gl_error
  2320.     add.w    #$C,a7
  2321.     movem.l    (a7)+,d2/a2
  2322.     rts
  2323. L320
  2324. ;   switch (ctx->Transform.MatrixMode)
  2325.     move.l    a2,a0
  2326.     add.l    #$E4D2,a0
  2327.     move.l    (a0),d0
  2328.     cmp.l    #$1701,d0
  2329.     beq.b    L322
  2330.     bgt.b    L326
  2331.     cmp.l    #$1700,d0
  2332.     beq.b    L321
  2333.     bra    L324
  2334. L326
  2335.     cmp.l    #$1702,d0
  2336.     beq.b    L323
  2337.     bra    L324
  2338. ;      
  2339. L321
  2340. ;ctx->ModelViewMat
  2341.     pea    $40.w
  2342.     pea    _Identity(a6)
  2343.     pea    $9FA(a2)
  2344.     jsr    _q_memcpy
  2345.     add.w    #$C,a7
  2346. ;Y( ctx->ModelView
  2347.     pea    $40.w
  2348.     pea    _Identity(a6)
  2349.     pea    $A3A(a2)
  2350.     jsr    _q_memcpy
  2351.     add.w    #$C,a7
  2352. ;         ctx->ModelViewMatrixType = MATRIX_IDENTITY;
  2353.     move.l    #1,$9F6(a2)
  2354. ;     ctx->NewModelViewMatrix = GL_FALSE;
  2355.     clr.b    $9F4(a2)
  2356. ;     
  2357.     bra.b    L325
  2358. L322
  2359. ;tx->ProjectionMat
  2360.     pea    $40.w
  2361.     pea    _Identity(a6)
  2362.     pea    $1284(a2)
  2363.     jsr    _q_memcpy
  2364.     add.w    #$C,a7
  2365. ;         ctx->ProjectionMatrixType = MATRIX_IDENTITY;
  2366.     move.l    #1,$1280(a2)
  2367. ;     ctx->NewProjectionMatrix = GL_FALSE;
  2368.     clr.b    $127E(a2)
  2369. ;     
  2370.     bra.b    L325
  2371. L323
  2372. ;            GLuint texSet = ctx->Texture.CurrentTransfor
  2373.     move.l    a2,a0
  2374.     add.l    #$DEBA,a0
  2375.     move.l    4(a0),d2
  2376. ;extureMatrix[texS
  2377.     pea    $40.w
  2378.     pea    _Identity(a6)
  2379.     lea    $1BD2(a2),a0
  2380.     move.l    d2,d0
  2381.     asl.l    #6,d0
  2382.     pea    0(a0,d0.l)
  2383.     jsr    _q_memcpy
  2384.     add.w    #$C,a7
  2385. ;            ctx->TextureMatrixType[texSet] = MATRIX_IDEN
  2386.     lea    $1BCA(a2),a0
  2387.     move.l    #1,0(a0,d2.l*4)
  2388. ;            ctx->NewTextureMatrix = GL_FALSE;
  2389.     clr.b    $1BC8(a2)
  2390. ;         
  2391.     bra.b    L325
  2392. L324
  2393. ;         gl_problem(ctx, "Bad matrix mode in gl_LoadIdentit
  2394.     move.l    #L317,-(a7)
  2395.     move.l    a2,-(a7)
  2396.     jsr    _gl_problem
  2397.     addq.w    #$8,a7
  2398. L325
  2399.     movem.l    (a7)+,d2/a2
  2400.     rts
  2401.  
  2402. L317
  2403.     dc.b    'Bad matrix mode in gl_LoadIdentity',0
  2404. L316
  2405.     dc.b    'glLoadIdentity',0
  2406.  
  2407.     SECTION "_gl_LoadMatrixf:0",CODE
  2408.  
  2409.  
  2410. ;void gl_LoadMatrixf( GLcontext *ctx, const GLfloat *m )
  2411.     XDEF    _gl_LoadMatrixf
  2412. _gl_LoadMatrixf
  2413.     movem.l    a2/a3,-(a7)
  2414.     fmovem.x fp2/fp3/fp4,-(a7)
  2415.     movem.l    $30(a7),a2/a3
  2416. L329
  2417. ;   if (INSIDE_BEGIN_END(ctx)) 
  2418.     move.l    a2,a0
  2419.     add.l    #$E968,a0
  2420.     move.l    (a0),d0
  2421.     cmp.l    #$1A00,d0
  2422.     beq.b    L331
  2423. L330
  2424. ;      gl_error( ctx,  GL_INVALID_OPERATION, "glLoadMatrix" );
  2425.     move.l    #L327,-(a7)
  2426.     pea    $502.w
  2427.     move.l    a2,-(a7)
  2428.     jsr    _gl_error
  2429.     add.w    #$C,a7
  2430.     fmovem.x (a7)+,fp2/fp3/fp4
  2431.     movem.l    (a7)+,a2/a3
  2432.     rts
  2433. L331
  2434. ;   switch (ctx->Transform.MatrixMode)
  2435.     move.l    a2,a0
  2436.     add.l    #$E4D2,a0
  2437.     move.l    (a0),d0
  2438.     cmp.l    #$1701,d0
  2439.     beq.b    L333
  2440.     bgt.b    L345
  2441.     cmp.l    #$1700,d0
  2442.     beq.b    L332
  2443.     bra    L343
  2444. L345
  2445.     cmp.l    #$1702,d0
  2446.     beq    L342
  2447.     bra    L343
  2448. ;      
  2449. L332
  2450. ;EMCPY( ctx->Model
  2451.     pea    $40.w
  2452.     move.l    a3,-(a7)
  2453.     pea    $9FA(a2)
  2454.     jsr    _q_memcpy
  2455.     add.w    #$C,a7
  2456. ;     ctx->NewModelViewMatrix = GL_TRUE;
  2457.     move.b    #1,$9F4(a2)
  2458. ;     
  2459.     bra    L344
  2460. L333
  2461. ;MCPY( ctx->Projec
  2462.     pea    $40.w
  2463.     move.l    a3,-(a7)
  2464.     pea    $1284(a2)
  2465.     jsr    _q_memcpy
  2466.     add.w    #$C,a7
  2467. ;     ctx->NewProjectionMatrix = GL_TRUE;
  2468.     move.b    #1,$127E(a2)
  2469. ;            c = M(2,2);
  2470.     fmove.s    $28(a3),fp0
  2471. ;            d = M(2,3);
  2472.     fmove.s    $38(a3),fp3
  2473. ;            if (c == 1.0)
  2474.     fmove.x    fp0,fp1
  2475.     fcmp.d    #$.3FF00000.00000000,fp1
  2476.     fbne.b    L335
  2477. L334
  2478. ;               n = 0.0;
  2479.     fmove.s    #$.00000000,fp2
  2480.     bra.b    L336
  2481. L335
  2482. ;               n = d / (c - 1.0);
  2483.     fmove.x    fp3,fp1
  2484.     fmove.x    fp0,fp2
  2485.     fsub.d    #$.3FF00000.00000000,fp2
  2486.     fdiv.x    fp2,fp1
  2487.     fmove.x    fp1,fp2
  2488. L336
  2489. ;            if (c == -1.0)
  2490.     fmove.x    fp0,fp1
  2491.     fcmp.d    #$.BFF00000.00000000,fp1
  2492.     fbne.b    L338
  2493. L337
  2494. ;               f = 1.0;
  2495.     fmove.s    #$.3F800000,fp0
  2496.     bra.b    L339
  2497. L338
  2498. ;               f = d / (c + 1.0);
  2499.     fmove.x    fp3,fp1
  2500.     fadd.d    #$.3FF00000.00000000,fp0
  2501.     fdiv.x    fp0,fp1
  2502.     fmove.x    fp1,fp0
  2503. L339
  2504. ;            ctx->NearFarStack[ctx->ProjectionStackDepth]
  2505.     lea    $1AC8(a2),a0
  2506.     move.l    $12C4(a2),d0
  2507.     fmove.s    fp2,0(a0,d0.l*8)
  2508. ;            ctx->NearFarStack[ctx->ProjectionStackDepth]
  2509.     lea    $1AC8(a2),a0
  2510.     move.l    $12C4(a2),d0
  2511.     lea    0(a0,d0.l*8),a0
  2512.     fmove.s    fp0,4(a0)
  2513. ;            if (ctx->Driver.NearFar) 
  2514.     tst.l    $97C(a2)
  2515.     beq.b    L341
  2516. L340
  2517. ;               (*ctx->Driver.NearFar)( ctx, n, f );
  2518.     fmove.s    fp0,-(a7)
  2519.     fmove.s    fp2,-(a7)
  2520.     move.l    a2,-(a7)
  2521.     move.l    $97C(a2),a0
  2522.     jsr    (a0)
  2523.     add.w    #$C,a7
  2524. L341
  2525. ;     
  2526.     bra.b    L344
  2527. L342
  2528. ;            GLuint texSet = ctx->Texture.CurrentTransfor
  2529.     move.l    a2,a0
  2530.     add.l    #$DEBA,a0
  2531.     move.l    4(a0),d0
  2532. ; ctx->TextureMatr
  2533.     pea    $40.w
  2534.     move.l    a3,-(a7)
  2535.     lea    $1BD2(a2),a0
  2536.     asl.l    #6,d0
  2537.     pea    0(a0,d0.l)
  2538.     jsr    _q_memcpy
  2539.     add.w    #$C,a7
  2540. ;            ctx->NewTextureMatrix = GL_TRUE;
  2541.     move.b    #1,$1BC8(a2)
  2542. ;     
  2543.     bra.b    L344
  2544. L343
  2545. ;         gl_problem(ctx, "Bad matrix mode in gl_LoadMatrixf
  2546.     move.l    #L328,-(a7)
  2547.     move.l    a2,-(a7)
  2548.     jsr    _gl_problem
  2549.     addq.w    #$8,a7
  2550. L344
  2551.     fmovem.x (a7)+,fp2/fp3/fp4
  2552.     movem.l    (a7)+,a2/a3
  2553.     rts
  2554.  
  2555. L328
  2556.     dc.b    'Bad matrix mode in gl_LoadMatrixf',0
  2557. L327
  2558.     dc.b    'glLoadMatrix',0
  2559.  
  2560.     SECTION "_gl_MultMatrixf:0",CODE
  2561.  
  2562.  
  2563. ;void gl_MultMatrixf( GLcontext *ctx, const GLfloat *m )
  2564.     XDEF    _gl_MultMatrixf
  2565. _gl_MultMatrixf
  2566.     move.l    a2,-(a7)
  2567.     move.l    $C(a7),a0
  2568.     move.l    $8(a7),a2
  2569. L348
  2570. ;   if (INSIDE_BEGIN_END(ctx)) 
  2571.     move.l    a2,a1
  2572.     add.l    #$E968,a1
  2573.     move.l    (a1),d0
  2574.     cmp.l    #$1A00,d0
  2575.     beq.b    L350
  2576. L349
  2577. ;      gl_error( ctx,  GL_INVALID_OPERATION, "glMultMatrix" );
  2578.     move.l    #L346,-(a7)
  2579.     pea    $502.w
  2580.     move.l    a2,-(a7)
  2581.     jsr    _gl_error
  2582.     add.w    #$C,a7
  2583.     move.l    (a7)+,a2
  2584.     rts
  2585. L350
  2586. ;   switch (ctx->Transform.MatrixMode)
  2587.     move.l    a2,a1
  2588.     add.l    #$E4D2,a1
  2589.     move.l    (a1),d0
  2590.     cmp.l    #$1701,d0
  2591.     beq.b    L352
  2592.     bgt.b    L356
  2593.     cmp.l    #$1700,d0
  2594.     beq.b    L351
  2595.     bra    L354
  2596. L356
  2597.     cmp.l    #$1702,d0
  2598.     beq.b    L353
  2599.     bra.b    L354
  2600. ;      
  2601. L351
  2602. ;         matmul( ctx->ModelViewMatrix, ctx->ModelViewMatrix
  2603.     move.l    a0,-(a7)
  2604.     pea    $9FA(a2)
  2605.     pea    $9FA(a2)
  2606.     jsr    _matmul
  2607.     add.w    #$C,a7
  2608. ;     ctx->NewModelViewMatrix = GL_TRUE;
  2609.     move.b    #1,$9F4(a2)
  2610. ;     
  2611.     bra.b    L355
  2612. L352
  2613. ;     matmul( ctx->ProjectionMatrix, ctx->ProjectionMatrix, m );
  2614.     move.l    a0,-(a7)
  2615.     pea    $1284(a2)
  2616.     pea    $1284(a2)
  2617.     jsr    _matmul
  2618.     add.w    #$C,a7
  2619. ;     ctx->NewProjectionMatrix = GL_TRUE;
  2620.     move.b    #1,$127E(a2)
  2621. ;     
  2622.     bra.b    L355
  2623. L353
  2624. ;            GLuint texSet = ctx->Texture.CurrentTransfor
  2625.     move.l    a2,a1
  2626.     add.l    #$DEBA,a1
  2627.     move.l    4(a1),d0
  2628. ;            matmul( ctx->TextureMatrix[texSet], ctx->Tex
  2629.     move.l    a0,-(a7)
  2630.     lea    $1BD2(a2),a0
  2631.     move.l    d0,d1
  2632.     asl.l    #6,d1
  2633.     pea    0(a0,d1.l)
  2634.     lea    $1BD2(a2),a0
  2635.     asl.l    #6,d0
  2636.     pea    0(a0,d0.l)
  2637.     jsr    _matmul
  2638.     add.w    #$C,a7
  2639. ;            ctx->NewTextureMatrix = GL_TRUE;
  2640.     move.b    #1,$1BC8(a2)
  2641. ;     
  2642.     bra.b    L355
  2643. L354
  2644. ;         gl_problem(ctx, "Bad matrix mode in gl_MultMatrixf
  2645.     move.l    #L347,-(a7)
  2646.     move.l    a2,-(a7)
  2647.     jsr    _gl_problem
  2648.     addq.w    #$8,a7
  2649. L355
  2650.     move.l    (a7)+,a2
  2651.     rts
  2652.  
  2653. L347
  2654.     dc.b    'Bad matrix mode in gl_MultMatrixf',0
  2655. L346
  2656.     dc.b    'glMultMatrix',0
  2657.  
  2658.     SECTION "_gl_rotation_matrix:0",CODE
  2659.  
  2660.  
  2661. ;void gl_rotation_matrix( GLfloat angle, GLfloat x, GLfloat y, GLfloa
  2662.     XDEF    _gl_rotation_matrix
  2663. _gl_rotation_matrix
  2664. L360    EQU    -$48
  2665.     link    a5,#L360
  2666.     move.l    a2,-(a7)
  2667.     fmovem.x fp2/fp3/fp4/fp5/fp6/fp7,-(a7)
  2668.     move.l    $18(a5),a2
  2669.     fmove.s    $14(a5),fp2
  2670.     fmove.s    $10(a5),fp3
  2671.     fmove.s    $C(a5),fp4
  2672.     fmove.s    $8(a5),fp5
  2673. L357
  2674. ;   s = sin( angle * DEG2RAD );
  2675.     fmove.x    fp5,fp0
  2676.     fmul.d    #$.3F91DF46.9D353915,fp0
  2677.     fmove.d    fp0,-(a7)
  2678.     jsr    _sin__r
  2679.     addq.w    #$8,a7
  2680.     fmove.d    fp0,-(a7)
  2681.     movem.l    (a7)+,d7/a0
  2682. ;   c = cos( angle * DEG2RAD );
  2683.     fmove.x    fp5,fp0
  2684.     fmul.d    #$.3F91DF46.9D353915,fp0
  2685.     fmove.d    fp0,-(a7)
  2686.     jsr    _cos__r
  2687.     addq.w    #$8,a7
  2688.     fmove.x    fp0,fp5
  2689. ;   mag = GL_SQRT( x*x + y*y + z*z );
  2690.     fmove.x    fp4,fp0
  2691.     fmul.x    fp4,fp0
  2692.     fmove.x    fp3,fp1
  2693.     fmul.x    fp3,fp1
  2694.     fadd.x    fp1,fp0
  2695.     fmove.x    fp2,fp1
  2696.     fmul.x    fp2,fp1
  2697.     fadd.x    fp1,fp0
  2698.     fmove.d    fp0,-(a7)
  2699.     jsr    _sqrt__r
  2700.     addq.w    #$8,a7
  2701. ;   if (mag == 0.0) 
  2702.     fmove.x    fp0,fp1
  2703.     ftst.d    fp1
  2704.     fbne.b    L359
  2705. L358
  2706. ;      MEMCPY(m, Identity
  2707.     pea    $40.w
  2708.     pea    _Identity(a6)
  2709.     move.l    a2,-(a7)
  2710.     jsr    _q_memcpy
  2711.     add.w    #$C,a7
  2712.     fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
  2713.     move.l    (a7)+,a2
  2714.     unlk    a5
  2715.     rts
  2716. L359
  2717. ;   x /= mag;
  2718.     fdiv.x    fp0,fp4
  2719. ;   y /= mag;
  2720.     fdiv.x    fp0,fp3
  2721. ;   z /= mag;
  2722.     fdiv.x    fp0,fp2
  2723. ;   xx = x * x;
  2724.     fmove.x    fp4,fp1
  2725.     fmul.x    fp4,fp1
  2726. ;   yy = y * y;
  2727.     fmove.x    fp3,fp0
  2728.     fmul.x    fp3,fp0
  2729.     fmove.s    fp0,-$14(a5)
  2730. ;   zz = z * z;
  2731.     fmove.x    fp2,fp0
  2732.     fmul.x    fp2,fp0
  2733.     fmove.s    fp0,-$18(a5)
  2734. ;   xy = x * y;
  2735.     fmove.x    fp4,fp0
  2736.     fmul.x    fp3,fp0
  2737.     fmove.s    fp0,-$1C(a5)
  2738. ;   yz = y * z;
  2739.     fmove.x    fp3,fp0
  2740.     fmul.x    fp2,fp0
  2741.     fmove.s    fp0,-$20(a5)
  2742. ;   zx = z * x;
  2743.     fmove.x    fp2,fp0
  2744.     fmul.x    fp4,fp0
  2745.     fmove.s    fp0,-$24(a5)
  2746. ;   xs = x * s;
  2747.     fmul.x    fp7,fp4
  2748. ;   ys = y * s;
  2749.     fmul.x    fp7,fp3
  2750. ;   zs = z * s;
  2751.     fmul.x    fp7,fp2
  2752. ;   one_c = 1.0F - c;
  2753.     fmove.s    #$.3F800000,fp0
  2754.     fsub.x    fp5,fp0
  2755. ;   M(0,0) = (one_c * xx) + c;
  2756.     fmul.x    fp0,fp1
  2757.     fadd.x    fp5,fp1
  2758.     fmove.s    fp1,(a2)
  2759. ;   M(0,1) = (one_c * xy) - zs;
  2760.     fmove.x    fp0,fp1
  2761.     fmul.s    -$1C(a5),fp1
  2762.     fsub.x    fp2,fp1
  2763.     fmove.s    fp1,$10(a2)
  2764. ;   M(0,2) = (one_c * zx) + ys;
  2765.     fmove.x    fp0,fp1
  2766.     fmul.s    -$24(a5),fp1
  2767.     fadd.x    fp3,fp1
  2768.     fmove.s    fp1,$20(a2)
  2769. ;   M(0,3) = 0.0F;
  2770.     clr.l    $30(a2)
  2771. ;   M(1,0) = (one_c * xy) + zs;
  2772.     fmove.x    fp0,fp1
  2773.     fmul.s    -$1C(a5),fp1
  2774.     fadd.x    fp2,fp1
  2775.     fmove.s    fp1,4(a2)
  2776. ;   M(1,1) = (one_c * yy) + c;
  2777.     fmove.x    fp0,fp1
  2778.     fmul.s    -$14(a5),fp1
  2779.     fadd.x    fp5,fp1
  2780.     fmove.s    fp1,$14(a2)
  2781. ;   M(1,2) = (one_c * yz) - xs;
  2782.     fmove.x    fp0,fp1
  2783.     fmul.s    -$20(a5),fp1
  2784.     fsub.x    fp4,fp1
  2785.     fmove.s    fp1,$24(a2)
  2786. ;   M(1,3) = 0.0F;
  2787.     clr.l    $34(a2)
  2788. ;   M(2,0) = (one_c * zx) - ys;
  2789.     fmove.x    fp0,fp1
  2790.     fmul.s    -$24(a5),fp1
  2791.     fsub.x    fp3,fp1
  2792.     fmove.s    fp1,$8(a2)
  2793. ;   M(2,1) = (one_c * yz) + xs;
  2794.     fmove.x    fp0,fp1
  2795.     fmul.s    -$20(a5),fp1
  2796.     fadd.x    fp4,fp1
  2797.     fmove.s    fp1,$18(a2)
  2798. ;   M(2,2) = (one_c * zz) + c;
  2799.     fmul.s    -$18(a5),fp0
  2800.     fadd.x    fp5,fp0
  2801.     fmove.s    fp0,$28(a2)
  2802. ;   M(2,3) = 0.0F;
  2803.     clr.l    $38(a2)
  2804. ;   M(3,0) = 0.0F;
  2805.     clr.l    $C(a2)
  2806. ;   M(3,1) = 0.0F;
  2807.     clr.l    $1C(a2)
  2808. ;   M(3,2) = 0.0F;
  2809.     clr.l    $2C(a2)
  2810. ;   M(3,3) = 1.0F;
  2811.     move.l    #$3F800000,$3C(a2)
  2812.     fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
  2813.     move.l    (a7)+,a2
  2814.     unlk    a5
  2815.     rts
  2816.  
  2817.     SECTION "_gl_Rotatef:0",CODE
  2818.  
  2819.  
  2820. ;void gl_Rotatef( GLcontext *ctx,
  2821.     XDEF    _gl_Rotatef
  2822. _gl_Rotatef
  2823. L362    EQU    -$40
  2824.     link    a5,#L362
  2825.     move.l    a2,-(a7)
  2826.     fmovem.x fp2/fp3,-(a7)
  2827.     move.l    $8(a5),a2
  2828.     fmove.s    $C(a5),fp0
  2829.     fmove.s    $10(a5),fp1
  2830.     fmove.s    $14(a5),fp2
  2831.     fmove.s    $18(a5),fp3
  2832. L361
  2833. ;   gl_rotation_matrix( angle, x, y, z, m );
  2834.     pea    -$40(a5)
  2835.     fmove.s    fp3,-(a7)
  2836.     fmove.s    fp2,-(a7)
  2837.     fmove.s    fp1,-(a7)
  2838.     fmove.s    fp0,-(a7)
  2839.     jsr    _gl_rotation_matrix
  2840.     add.w    #$14,a7
  2841. ;   gl_MultMatrixf( ctx, m );
  2842.     pea    -$40(a5)
  2843.     move.l    a2,-(a7)
  2844.     jsr    _gl_MultMatrixf
  2845.     addq.w    #$8,a7
  2846.     fmovem.x (a7)+,fp2/fp3
  2847.     move.l    (a7)+,a2
  2848.     unlk    a5
  2849.     rts
  2850.  
  2851.     SECTION "_gl_Scalef:0",CODE
  2852.  
  2853.  
  2854. ;void gl_Scalef( GLcontext *ctx, GLfloat x, GLfloat y, GLfloat z )
  2855.     XDEF    _gl_Scalef
  2856. _gl_Scalef
  2857.     fmovem.x fp2/fp3/fp4,-(a7)
  2858.     move.l    $28(a7),a1
  2859.     fmove.s    $34(a7),fp1
  2860.     fmove.s    $30(a7),fp2
  2861.     fmove.s    $2C(a7),fp3
  2862. L365
  2863. ;   if (INSIDE_BEGIN_END(ctx)) 
  2864.     move.l    a1,a0
  2865.     add.l    #$E968,a0
  2866.     move.l    (a0),d0
  2867.     cmp.l    #$1A00,d0
  2868.     beq.b    L367
  2869. L366
  2870. ;      gl_error( ctx,  GL_INVALID_OPERATION, "glScale" );
  2871.     move.l    #L363,-(a7)
  2872.     pea    $502.w
  2873.     move.l    a1,-(a7)
  2874.     jsr    _gl_error
  2875.     add.w    #$C,a7
  2876.     fmovem.x (a7)+,fp2/fp3/fp4
  2877.     rts
  2878. L367
  2879. ;   switch (ctx->Transform.MatrixMode)
  2880.     move.l    a1,a0
  2881.     add.l    #$E4D2,a0
  2882.     move.l    (a0),d0
  2883.     cmp.l    #$1701,d0
  2884.     beq.b    L369
  2885.     bgt.b    L373
  2886.     cmp.l    #$1700,d0
  2887.     beq.b    L368
  2888.     bra.b    L371
  2889. L373
  2890.     cmp.l    #$1702,d0
  2891.     beq.b    L370
  2892.     bra.b    L371
  2893. ;      
  2894. L368
  2895. ;         m = ctx->ModelViewMatrix;
  2896.     lea    $9FA(a1),a0
  2897. ;     ctx->NewModelViewMatrix = GL_TRUE;
  2898.     move.b    #1,$9F4(a1)
  2899. ;     
  2900.     bra.b    L372
  2901. L369
  2902. ;         m = ctx->ProjectionMatrix;
  2903.     lea    $1284(a1),a0
  2904. ;     ctx->NewProjectionMatrix = GL_TRUE;
  2905.     move.b    #1,$127E(a1)
  2906. ;     
  2907.     bra.b    L372
  2908. L370
  2909. ;            GLuint texSet = ctx->Texture.CurrentTransfor
  2910.     move.l    a1,a0
  2911.     add.l    #$DEBA,a0
  2912.     move.l    4(a0),d0
  2913. ;            m = ctx->TextureMatrix[texSet];
  2914.     lea    $1BD2(a1),a0
  2915.     asl.l    #6,d0
  2916.     add.l    d0,a0
  2917. ;            ctx->NewTextureMatrix = GL_TRUE;
  2918.     move.b    #1,$1BC8(a1)
  2919. ;     
  2920.     bra.b    L372
  2921. L371
  2922. ;         gl_problem(ctx, "Bad matrix mode in gl_Scalef");
  2923.     move.l    #L364,-(a7)
  2924.     move.l    a1,-(a7)
  2925.     jsr    _gl_problem
  2926.     addq.w    #$8,a7
  2927.     fmovem.x (a7)+,fp2/fp3/fp4
  2928.     rts
  2929. L372
  2930. ;         return;
  2931. ;   m[0] *= x;
  2932.     fmove.s    (a0),fp0
  2933.     fmul.x    fp3,fp0
  2934.     fmove.s    fp0,(a0)
  2935. ;   m[4] *= y;
  2936.     lea    $10(a0),a1
  2937.     fmove.s    (a1),fp0
  2938.     fmul.x    fp2,fp0
  2939.     fmove.s    fp0,(a1)
  2940. ;   m[8]  *= z;
  2941.     lea    $20(a0),a1
  2942.     fmove.s    (a1),fp0
  2943.     fmul.x    fp1,fp0
  2944.     fmove.s    fp0,(a1)
  2945. ;   m[1] *= x;
  2946.     lea    4(a0),a1
  2947.     fmove.s    (a1),fp0
  2948.     fmul.x    fp3,fp0
  2949.     fmove.s    fp0,(a1)
  2950. ;   m[5] *= y;
  2951.     lea    $14(a0),a1
  2952.     fmove.s    (a1),fp0
  2953.     fmul.x    fp2,fp0
  2954.     fmove.s    fp0,(a1)
  2955. ;   m[9]  *= z;
  2956.     lea    $24(a0),a1
  2957.     fmove.s    (a1),fp0
  2958.     fmul.x    fp1,fp0
  2959.     fmove.s    fp0,(a1)
  2960. ;   m[2] *= x;
  2961.     lea    $8(a0),a1
  2962.     fmove.s    (a1),fp0
  2963.     fmul.x    fp3,fp0
  2964.     fmove.s    fp0,(a1)
  2965. ;   m[6] *= y;
  2966.     lea    $18(a0),a1
  2967.     fmove.s    (a1),fp0
  2968.     fmul.x    fp2,fp0
  2969.     fmove.s    fp0,(a1)
  2970. ;   m[10] *= z;
  2971.     lea    $28(a0),a1
  2972.     fmove.s    (a1),fp0
  2973.     fmul.x    fp1,fp0
  2974.     fmove.s    fp0,(a1)
  2975. ;   m[3] *= x;
  2976.     lea    $C(a0),a1
  2977.     fmove.s    (a1),fp0
  2978.     fmul.x    fp3,fp0
  2979.     fmove.s    fp0,(a1)
  2980. ;   m[7] *= y;
  2981.     lea    $1C(a0),a1
  2982.     fmove.s    (a1),fp0
  2983.     fmul.x    fp2,fp0
  2984.     fmove.s    fp0,(a1)
  2985. ;   m[11] *= z;
  2986.     add.w    #$2C,a0
  2987.     fmove.s    (a0),fp0
  2988.     fmul.x    fp1,fp0
  2989.     fmove.s    fp0,(a0)
  2990.     fmovem.x (a7)+,fp2/fp3/fp4
  2991.     rts
  2992.  
  2993. L364
  2994.     dc.b    'Bad matrix mode in gl_Scalef',0
  2995. L363
  2996.     dc.b    'glScale',0
  2997.  
  2998.     SECTION "_gl_Translatef:0",CODE
  2999.  
  3000.  
  3001. ;void gl_Translatef( GLcontext *ctx, GLfloat x, GLfloat y, GLfloat z )
  3002.     XDEF    _gl_Translatef
  3003. _gl_Translatef
  3004.     fmovem.x fp2/fp3/fp4/fp5,-(a7)
  3005.     move.l    $34(a7),a1
  3006.     fmove.s    $40(a7),fp2
  3007.     fmove.s    $3C(a7),fp3
  3008.     fmove.s    $38(a7),fp4
  3009. L376
  3010. ;   if (INSIDE_BEGIN_END(ctx)) 
  3011.     move.l    a1,a0
  3012.     add.l    #$E968,a0
  3013.     move.l    (a0),d0
  3014.     cmp.l    #$1A00,d0
  3015.     beq.b    L378
  3016. L377
  3017. ;      gl_error( ctx, GL_INVALID_OPERATION, "glTranslate" );
  3018.     move.l    #L374,-(a7)
  3019.     pea    $502.w
  3020.     move.l    a1,-(a7)
  3021.     jsr    _gl_error
  3022.     add.w    #$C,a7
  3023.     fmovem.x (a7)+,fp2/fp3/fp4/fp5
  3024.     rts
  3025. L378
  3026. ;   switch (ctx->Transform.MatrixMode)
  3027.     move.l    a1,a0
  3028.     add.l    #$E4D2,a0
  3029.     move.l    (a0),d0
  3030.     cmp.l    #$1701,d0
  3031.     beq.b    L380
  3032.     bgt.b    L384
  3033.     cmp.l    #$1700,d0
  3034.     beq.b    L379
  3035.     bra.b    L382
  3036. L384
  3037.     cmp.l    #$1702,d0
  3038.     beq.b    L381
  3039.     bra.b    L382
  3040. ;      
  3041. L379
  3042. ;         m = ctx->ModelViewMatrix;
  3043.     lea    $9FA(a1),a0
  3044. ;     ctx->NewModelViewMatrix = GL_TRUE;
  3045.     move.b    #1,$9F4(a1)
  3046. ;     
  3047.     bra.b    L383
  3048. L380
  3049. ;         m = ctx->ProjectionMatrix;
  3050.     lea    $1284(a1),a0
  3051. ;     ctx->NewProjectionMatrix = GL_TRUE;
  3052.     move.b    #1,$127E(a1)
  3053. ;     
  3054.     bra.b    L383
  3055. L381
  3056. ;            GLuint texSet = ctx->Texture.CurrentTransfor
  3057.     move.l    a1,a0
  3058.     add.l    #$DEBA,a0
  3059.     move.l    4(a0),d0
  3060. ;            m = ctx->TextureMatrix[texSet];
  3061.     lea    $1BD2(a1),a0
  3062.     asl.l    #6,d0
  3063.     add.l    d0,a0
  3064. ;            ctx->NewTextureMatrix = GL_TRUE;
  3065.     move.b    #1,$1BC8(a1)
  3066. ;     
  3067.     bra.b    L383
  3068. L382
  3069. ;         gl_problem(ctx, "Bad matrix mode in gl_Translatef")
  3070.     move.l    #L375,-(a7)
  3071.     move.l    a1,-(a7)
  3072.     jsr    _gl_problem
  3073.     addq.w    #$8,a7
  3074.     fmovem.x (a7)+,fp2/fp3/fp4/fp5
  3075.     rts
  3076. L383
  3077. ;         return;
  3078. ;   m[12] = m[0] * x + m[4] * y + m[8]  * z + m[12];
  3079.     fmove.s    (a0),fp0
  3080.     fmul.x    fp4,fp0
  3081.     fmove.s    $10(a0),fp1
  3082.     fmul.x    fp3,fp1
  3083.     fadd.x    fp1,fp0
  3084.     fmove.s    $20(a0),fp1
  3085.     fmul.x    fp2,fp1
  3086.     fadd.x    fp1,fp0
  3087.     fadd.s    $30(a0),fp0
  3088.     fmove.s    fp0,$30(a0)
  3089. ;   m[13] = m[1] * x + m[5] * y + m[9]  * z + m[13];
  3090.     fmove.s    4(a0),fp0
  3091.     fmul.x    fp4,fp0
  3092.     fmove.s    $14(a0),fp1
  3093.     fmul.x    fp3,fp1
  3094.     fadd.x    fp1,fp0
  3095.     fmove.s    $24(a0),fp1
  3096.     fmul.x    fp2,fp1
  3097.     fadd.x    fp1,fp0
  3098.     fadd.s    $34(a0),fp0
  3099.     fmove.s    fp0,$34(a0)
  3100. ;   m[14] = m[2] * x + m[6] * y + m[10] * z + m[14];
  3101.     fmove.s    $8(a0),fp0
  3102.     fmul.x    fp4,fp0
  3103.     fmove.s    $18(a0),fp1
  3104.     fmul.x    fp3,fp1
  3105.     fadd.x    fp1,fp0
  3106.     fmove.s    $28(a0),fp1
  3107.     fmul.x    fp2,fp1
  3108.     fadd.x    fp1,fp0
  3109.     fadd.s    $38(a0),fp0
  3110.     fmove.s    fp0,$38(a0)
  3111. ;   m[15] = m[3] * x + m[7] * y + m[11] * z + m[15];
  3112.     fmove.s    $C(a0),fp0
  3113.     fmul.x    fp4,fp0
  3114.     fmove.s    $1C(a0),fp1
  3115.     fmul.x    fp3,fp1
  3116.     fadd.x    fp1,fp0
  3117.     fmove.s    $2C(a0),fp1
  3118.     fmul.x    fp2,fp1
  3119.     fadd.x    fp1,fp0
  3120.     fadd.s    $3C(a0),fp0
  3121.     fmove.s    fp0,$3C(a0)
  3122.     fmovem.x (a7)+,fp2/fp3/fp4/fp5
  3123.     rts
  3124.  
  3125. L375
  3126.     dc.b    'Bad matrix mode in gl_Translatef',0
  3127. L374
  3128.     dc.b    'glTranslate',0
  3129.  
  3130.     SECTION "_gl_Viewport:0",CODE
  3131.  
  3132.  
  3133. ;void gl_Viewport( GLcontext *ctx,
  3134.     XDEF    _gl_Viewport
  3135. _gl_Viewport
  3136.     movem.l    d2-d5/a2,-(a7)
  3137.     move.l    $28(a7),d2
  3138.     move.l    $24(a7),d3
  3139.     move.l    $20(a7),d4
  3140.     move.l    $1C(a7),d5
  3141.     move.l    $18(a7),a2
  3142. L386
  3143. ;   if (width<0 || height<0) 
  3144.     tst.l    d3
  3145.     bmi.b    L388
  3146. L387
  3147.     tst.l    d2
  3148.     bpl.b    L389
  3149. L388
  3150. ;      gl_error( ctx,  GL_INVALID_VALUE, "glViewport" );
  3151.     move.l    #L385,-(a7)
  3152.     pea    $501.w
  3153.     move.l    a2,-(a7)
  3154.     jsr    _gl_error
  3155.     add.w    #$C,a7
  3156.     movem.l    (a7)+,d2-d5/a2
  3157.     rts
  3158. L389
  3159. ;   if (INSIDE_BEGIN_END(ctx)) 
  3160.     move.l    a2,a0
  3161.     add.l    #$E968,a0
  3162.     move.l    (a0),d0
  3163.     cmp.l    #$1A00,d0
  3164.     beq.b    L391
  3165. L390
  3166. ;      gl_error( ctx,  GL_INVALID_OPERATION, "glViewport" );
  3167.     move.l    #L385,-(a7)
  3168.     pea    $502.w
  3169.     move.l    a2,-(a7)
  3170.     jsr    _gl_error
  3171.     add.w    #$C,a7
  3172.     movem.l    (a7)+,d2-d5/a2
  3173.     rts
  3174. L391
  3175. ;   width  = CLAMP( width,  1, MAX_WIDTH );
  3176.     cmp.l    #1,d3
  3177.     bge.b    L393
  3178. L392
  3179.     moveq    #1,d3
  3180.     bra.b    L397
  3181. L393
  3182.     cmp.l    #$640,d3
  3183.     ble.b    L395
  3184. L394
  3185.     move.l    #$640,d3
  3186. L395
  3187. L396
  3188. L397
  3189. ;   height = CLAMP( height, 1, MAX_HEIGHT );
  3190.     cmp.l    #1,d2
  3191.     bge.b    L399
  3192. L398
  3193.     moveq    #1,d2
  3194.     bra.b    L403
  3195. L399
  3196.     cmp.l    #$4B0,d2
  3197.     ble.b    L401
  3198. L400
  3199.     move.l    #$4B0,d2
  3200. L401
  3201. L402
  3202. L403
  3203. ;   ctx->Viewport.X = x;
  3204.     move.l    a2,a0
  3205.     add.l    #$E540,a0
  3206.     move.l    d5,(a0)
  3207. ;   ctx->Viewport.Width = width;
  3208.     move.l    a2,a0
  3209.     add.l    #$E548,a0
  3210.     move.l    d3,(a0)
  3211. ;   ctx->Viewport.Y = y;
  3212.     move.l    a2,a0
  3213.     add.l    #$E544,a0
  3214.     move.l    d4,(a0)
  3215. ;   ctx->Viewport.Height = height;
  3216.     move.l    a2,a0
  3217.     add.l    #$E54C,a0
  3218.     move.l    d2,(a0)
  3219. ;   ctx->Viewport.Sx = (GLfloat) width / 2.0F;
  3220.     fmove.l    d3,fp0
  3221.     fdiv.s    #$.40000000,fp0
  3222.     move.l    a2,a0
  3223.     add.l    #$E558,a0
  3224.     fmove.s    fp0,(a0)
  3225. ;   ctx->Viewport.Tx = ctx->Viewport.Sx + x;
  3226.     move.l    a2,a0
  3227.     add.l    #$E540,a0
  3228.     fmove.l    d5,fp1
  3229.     fmove.s    $18(a0),fp0
  3230.     fadd.x    fp1,fp0
  3231.     move.l    a2,a0
  3232.     add.l    #$E564,a0
  3233.     fmove.s    fp0,(a0)
  3234. ;   ctx->Viewport.Sy = (GLfloat) height / 2.0F;
  3235.     fmove.l    d2,fp0
  3236.     fdiv.s    #$.40000000,fp0
  3237.     move.l    a2,a0
  3238.     add.l    #$E55C,a0
  3239.     fmove.s    fp0,(a0)
  3240. ;   ctx->Viewport.Ty = ctx->Viewport.Sy + y;
  3241.     move.l    a2,a0
  3242.     add.l    #$E540,a0
  3243.     fmove.l    d4,fp1
  3244.     fmove.s    $1C(a0),fp0
  3245.     fadd.x    fp1,fp0
  3246.     move.l    a2,a0
  3247.     add.l    #$E568,a0
  3248.     fmove.s    fp0,(a0)
  3249. ;   ctx->NewState |= NEW_ALL;
  3250.     move.l    a2,a0
  3251.     add.l    #$E960,a0
  3252.     move.l    (a0),d0
  3253.     or.l    #$FF,d0
  3254.     move.l    a2,a0
  3255.     add.l    #$E960,a0
  3256.     move.l    d0,(a0)
  3257. ;   gl_ResizeBuffersMESA(ctx);
  3258.     move.l    a2,-(a7)
  3259.     jsr    _gl_ResizeBuffersMESA
  3260.     addq.w    #4,a7
  3261. ;   if (ctx->Driver.Viewport) 
  3262.     tst.l    $9E4(a2)
  3263.     beq.b    L405
  3264. L404
  3265. ;      (*ctx->Driver.Viewport)( ctx, x, y, width, height );
  3266.     move.l    d2,-(a7)
  3267.     move.l    d3,-(a7)
  3268.     move.l    d4,-(a7)
  3269.     move.l    d5,-(a7)
  3270.     move.l    a2,-(a7)
  3271.     move.l    $9E4(a2),a0
  3272.     jsr    (a0)
  3273.     add.w    #$14,a7
  3274. L405
  3275.     movem.l    (a7)+,d2-d5/a2
  3276.     rts
  3277.  
  3278. L385
  3279.     dc.b    'glViewport',0
  3280.  
  3281.     SECTION "_gl_DepthRange:0",CODE
  3282.  
  3283.  
  3284. ;void gl_DepthRange( GLcontext *ctx, GLclampd nearval, GLclampd farva
  3285.     XDEF    _gl_DepthRange
  3286. _gl_DepthRange
  3287.     fmovem.x fp2/fp3/fp4/fp5,-(a7)
  3288.     move.l    $34(a7),a0
  3289.     fmove.d    $40(a7),fp3
  3290.     fmove.d    $38(a7),fp4
  3291. L407
  3292. ;   if (INSIDE_BEGIN_END(ctx)) 
  3293.     move.l    a0,a1
  3294.     add.l    #$E968,a1
  3295.     move.l    (a1),d0
  3296.     cmp.l    #$1A00,d0
  3297.     beq.b    L409
  3298. L408
  3299. ;      gl_error( ctx, GL_INVALID_OPERATION, "glDepthRange" );
  3300.     move.l    #L406,-(a7)
  3301.     pea    $502.w
  3302.     move.l    a0,-(a7)
  3303.     jsr    _gl_error
  3304.     add.w    #$C,a7
  3305.     fmovem.x (a7)+,fp2/fp3/fp4/fp5
  3306.     rts
  3307. L409
  3308. ;   n = (GLfloat) CLAMP( nearval, 0.0, 1.0 );
  3309.     fcmp.d    #$.00000000.00000000,fp4
  3310.     fboge.b    L411
  3311. L410
  3312.     fmove.d    #$.00000000.00000000,fp0
  3313.     bra.b    L415
  3314. L411
  3315.     fcmp.d    #$.3FF00000.00000000,fp4
  3316.     fbole.b    L413
  3317. L412
  3318.     fmove.d    #$.3FF00000.00000000,fp0
  3319.     bra.b    L414
  3320. L413
  3321.     fmove.x    fp4,fp0
  3322. L414
  3323. L415
  3324.     fmove.x    fp0,fp1
  3325. ;   f = (GLfloat) CLAMP( farval, 0.0, 1.0 );
  3326.     fcmp.d    #$.00000000.00000000,fp3
  3327.     fboge.b    L417
  3328. L416
  3329.     fmove.d    #$.00000000.00000000,fp0
  3330.     bra.b    L421
  3331. L417
  3332.     fcmp.d    #$.3FF00000.00000000,fp3
  3333.     fbole.b    L419
  3334. L418
  3335.     fmove.d    #$.3FF00000.00000000,fp0
  3336.     bra.b    L420
  3337. L419
  3338.     fmove.x    fp3,fp0
  3339. L420
  3340. L421
  3341. ;   ctx->Viewport.Near = n;
  3342.     move.l    a0,a1
  3343.     add.l    #$E550,a1
  3344.     fmove.s    fp1,(a1)
  3345. ;   ctx->Viewport.Far = f;
  3346.     move.l    a0,a1
  3347.     add.l    #$E554,a1
  3348.     fmove.s    fp0,(a1)
  3349. ;   ctx->Viewport.Sz = DEPTH_SCALE * ((f - n) / 2.0);
  3350.     fmove.x    fp0,fp2
  3351.     fsub.x    fp1,fp2
  3352.     fdiv.d    #$.40000000.00000000,fp2
  3353.     fmul.d    #$.40EFFFE0.00000000,fp2
  3354.     move.l    a0,a1
  3355.     add.l    #$E560,a1
  3356.     fmove.s    fp2,(a1)
  3357. ;   ctx->Viewport.Tz = DEPTH_SCALE * ((f - n) / 2.0 + n);
  3358.     fsub.x    fp1,fp0
  3359.     fdiv.d    #$.40000000.00000000,fp0
  3360.     fadd.x    fp1,fp0
  3361.     fmul.d    #$.40EFFFE0.00000000,fp0
  3362.     move.l    a0,a1
  3363.     add.l    #$E56C,a1
  3364.     fmove.s    fp0,(a1)
  3365. ;   if (ctx->Driver.DepthRange) 
  3366.     tst.l    $9E8(a0)
  3367.     beq.b    L423
  3368. L422
  3369. ;      (*ctx->Driver.DepthRange)( ctx, nearval, farval );
  3370.     fmove.d    fp3,-(a7)
  3371.     fmove.d    fp4,-(a7)
  3372.     move.l    a0,-(a7)
  3373.     move.l    $9E8(a0),a0
  3374.     jsr    (a0)
  3375.     add.w    #$14,a7
  3376. L423
  3377.     fmovem.x (a7)+,fp2/fp3/fp4/fp5
  3378.     rts
  3379.  
  3380. L406
  3381.     dc.b    'glDepthRange',0
  3382.  
  3383.     END
  3384.